小编Jay*_*tel的帖子

为什么在Jaxb2Marshaller中需要检查根元素?

我正在使用Jaxb2Marshaller通过spring @ResponseBody注释来编组Java bean.对于JSON编组工作正常.但对于xml,我不断得到HTTP 406响应.Jaxb2Marshaller类中的一点点挖掘显示它为有界类检查@XmlRootElement(参见下面的代码片段).

从xsd生成java代码时,我的pojo不包含@XmlRootElement,并且AnnotationMethodHandlerAdapter未识别正确的消息转换器,最终导致406.

我没有从xsd自动生成java代码,而是创建了自己的pojo类并使用了@XmlRootElement.然后编组工作正常.

我想理解为什么让@XmlRootElement检查有界类很重要.或者在xsd中将元素指定为@XmlRootElement的任何方法.

Jaxb2Marshaller的代码片段:

public boolean supports(Class clazz) {
    return supportsInternal(clazz, true);
}

private boolean supportsInternal(Class<?> clazz, boolean checkForXmlRootElement) {
    if (checkForXmlRootElement && clazz.getAnnotation(XmlRootElement.class) == null) {
        return false;
    }
    if (clazz.getAnnotation(XmlType.class) == null) {
        return false;
    }
    if (StringUtils.hasLength(getContextPath())) {
        String className = ClassUtils.getQualifiedName(clazz);
        int lastDotIndex = className.lastIndexOf('.');
        if (lastDotIndex == -1) {
            return false;
        }
        String packageName = className.substring(0, lastDotIndex);
        String[] contextPaths = StringUtils.tokenizeToStringArray(getContextPath(), ":");
        for (String contextPath : contextPaths) {
            if (contextPath.equals(packageName)) { …
Run Code Online (Sandbox Code Playgroud)

java spring xsd jaxb marshalling

5
推荐指数
1
解决办法
7133
查看次数

Apache Camel 的 JsonMappingException

我在骆驼路线上遇到以下异常

Caused by: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.apache.camel.converter.stream.InputStreamCache and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:284)
    at com.fasterxml.jackson.databind.SerializerProvider.mappingException(SerializerProvider.java:1110)
    at com.fasterxml.jackson.databind.SerializerProvider.reportMappingProblem(SerializerProvider.java:1135)
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:69)
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:32)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:292)
    at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1429)
    at com.fasterxml.jackson.databind.ObjectWriter._configAndWriteValue(ObjectWriter.java:1158)
Run Code Online (Sandbox Code Playgroud)

骆驼路线:

restConfiguration().producerComponent("http4").host("localhost").port(9080);


    from("direct:getSubscriptions")
        .hystrix()
        .to("rest:get:testendpoint?carrier={carrier}&flightNumber={flightNumber}&origin={origin}&destination={destination}&date={date}")
        .log(">> - ${body}")
        .marshal().json(JsonLibrary.Jackson)
        .split().jsonpathWriteAsString("$.[1]", true)
        .log("${body}");
Run Code Online (Sandbox Code Playgroud)

不确定我这样做是否正确?任何建议将不胜感激

json split apache-camel spring-camel

5
推荐指数
1
解决办法
6904
查看次数

Redisson CacheConfig 中的 ttl 和 maxIdletime 有什么区别

我试图参考文档,但我仍然不清楚 Redisson 中CacheConfig类中的ttl 和 maxIdleTime 之间的区别。

任何人都可以请说明一下吗?

redis spring-cache redisson

4
推荐指数
1
解决办法
1855
查看次数

骨干更改事件未触发

我正在学习Backbone并在一个地方敲击.我想在页面加载时加载模型.所以我有下面的代码.

<html>
<head>
    <script src="js/jquery.min.js"></script>
    <script src="js/underscore-min.js"></script>
    <script src="js/backbone-min.js"></script>
    <script src="js/json2.js"></script>
</head>
<body>
    <h1></h1>
    <div id="poview"></div>
    <script id="poTemplate" type="text/template">
        <td><%= Ponumber %></td>
        <td><%= Posuppliername %></td>
        <td><%= Postatusname %></td>
        <td><%= Podate %></td>
        <td><%= DispOrderTotal %></td>
    </script>
    <script type="text/javascript">
        (function($) {
            var PO = Backbone.Model.extend()

            var POList = Backbone.Collection.extend({
                url: 'po.json',
                model: PO,
                parse: function(response) {
                    console.log(response.PurchaseOrder)
                    return response.PurchaseOrder
                }
            })

            var POView = Backbone.View.extend({
                tagName: 'tr',
                template: $('#poTemplate').html(),
                initialize: function() {
                    _.bindAll(this, 'render')
                    this.model.bind('change', this.render)
                },
                events: {
                    'click': 'click'
                }, …
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js backbone-events

1
推荐指数
1
解决办法
2905
查看次数