Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 放松3+;杰克逊&x2B;Tomcat+;XML响应_Java_Xml_Tomcat_Jackson_Resteasy - Fatal编程技术网

Java 放松3+;杰克逊&x2B;Tomcat+;XML响应

Java 放松3+;杰克逊&x2B;Tomcat+;XML响应,java,xml,tomcat,jackson,resteasy,Java,Xml,Tomcat,Jackson,Resteasy,为了获得json响应,reseasy定义了一种与Jackson集成的方法。 使用reseasy jackson提供程序和resteasy-jackson2提供程序 Jackson还可用于将从\反序列化为XML。i、 与jackson jaxrs xml提供程序和jackson dataformat xml一起使用。但是,使用这些方法并生成XML响应失败 org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find

为了获得json响应,reseasy定义了一种与Jackson集成的方法。 使用reseasy jackson提供程序和resteasy-jackson2提供程序

Jackson还可用于将从\反序列化为XML。i、 与jackson jaxrs xml提供程序和jackson dataformat xml一起使用。但是,使用这些方法并生成XML响应失败

org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: someclass of media type: application/xml
使用的依赖项

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>${resteasy.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-validator-provider-11</artifactId>
            <version>${resteasy.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-servlet-initializer</artifactId>
            <version>${resteasy.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson2-provider</artifactId>
            <version>${resteasy.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.jaxrs</groupId>
            <artifactId>jackson-jaxrs-xml-provider</artifactId>
            <version>${jackson.version}</version>
        </dependency>

JAXB是将Java类映射到XML和XML模式的注释框架

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxb-provider</artifactId>
    <version>${resteasy.version}</version>
</dependency> 
更新:
由于Resteasy没有基于Jackson的内置xml提供程序,如果您不喜欢JAXB注释,也可以编写自己的处理程序

使用以下依赖项是因为在jackson 2.1之后不推荐使用
jackson jaxrs xml提供程序

<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-xml</artifactId>
  <version>{jackson-version}</version>
</dependency>
JAX-RS运行时将查看每个编写器的
@生成的
注释,并调用
MessageBodyWriter.isWriteable()
方法;然后将选择您的自定义
MessageBodyWriter
来执行创建的作业

让我们看看它是否进入resteasy工件。

除了放置

    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-xml-provider</artifactId>
        <version>${jackson.version}</version>
    </dependency>

com.fasterxml.jackson.jaxrs
jackson jaxrs xml提供程序
${jackson.version}
对于POM文件,删除所有JAXB(@Xml*)注释。JAXB注释将触发默认提供程序


用Thorntail和Jackson 2.9测试。

问题是什么?问题是如何使用resteady-jackson2-provider jar中的jacksonat从resteasy获取xml响应有一个名为Jackson2JsonInterceptor的编写器拦截器。我觉得xml也需要类似的方法才能工作。有没有一种方法可以在不向模型类添加注释的情况下实现它。有了jackson,这是可能的,我能够用resteasy返回json。正在尝试使用jackson返回xml。@jathinsanghvi当前没有内置的处理程序或提供程序允许您自动将Java对象转换为xml()。即使如此,您也可以通过实现javax.ws.rs.ext.MessageBodyWriter接口和Jackson xml组件来编写自己的处理程序。这看起来很简单。。我得试试。我正在考虑实现com.fasterxml.jackson.jaxrs.xml.JacksonJaxbXMLProvider。实现类类似于org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider。然后可以在更通用的上下文中使用它。
<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-xml</artifactId>
  <version>{jackson-version}</version>
</dependency>
@Provider
@Produces("application/xml")
public class XMLMarshaller implements MessageBodyWriter<Object> {

    @Override
    public boolean isWriteable(Class<?> type, Type genericType,
            Annotation[] annotations, MediaType mediaType) {            
        return true;
    }

    @Override
    public long getSize(Object obj, Class<?> type, Type genericType,
            Annotation[] annotations, MediaType mediaType) {            
        return -1;
    }

    @Override
    public void writeTo(Object obj, Class<?> type, Type genericType,
            Annotation[] annotations, MediaType mediaType,
            MultivaluedMap<String, Object> httpHeaders,
            OutputStream entityStream) throws IOException,
            WebApplicationException {

        ObjectMapper xmlMapper = new XmlMapper();
        xmlMapper.writeValue(entityStream, obj);            
    }    
}
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-xml-provider</artifactId>
        <version>${jackson.version}</version>
    </dependency>