rest - 如何在 CXF 中向 JAXBContext 添加其他类

标签 rest jaxb cxf

我需要使用 <any>我的 xsd 中的元素以实现可扩展性。所以我使用 xsd 如下所示。

<complexType name="AddInput">
        <sequence>
            <element name="First" type="int"></element>
            <element name="Sec" type="int"></element>
            <any processContents="lax" namespace="##any" minOccurs="0" maxOccurs="unbounded"></any>
        </sequence>
    </complexType>

我已经定义了一个复杂的对象放入 <any>占位符,带有 ObjectFactory (@XMLRegistry, @XmlElementDecl) 但是如果我在代码下面运行,我会得到

org.apache.xerces.dom.ElementNSImpl



而不是 JAXBElementObject。我在谷歌搜索,我看到 JAXBContext 应该知道架构。但我不确定,如何让 JAXBContext 知道我的复杂对象。任何想法都会有所帮助。
        List<Object> elemList = (List<Object>)input.getAny();
        for(Object elem : elemList){
            System.out.println(elem.getClass());
        }

最佳答案

如果您有如下的 JAX-RS 方法 JAXBContext used 将等同于进行以下调用 JAXBContext.newInstance(Foo)

@GET
@Produces(MediaType.APPLICATION_XML)
@Path("{id}")
public Foo read(@PathParam("id") long id) {
    return entityManager.find(Foo.class, id);
}

如果你想要 JAXBContext要了解您从 XML 模式生成的所有类,您可以关联一个 JAXBContext域对象使用 ContextResolver .
import java.io.*;
import java.util.*;     
import javax.ws.rs.Produces;
import javax.ws.rs.ext.*;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.JAXBContextFactory;

@Provider
@Produces(MediaType.APPLICATION_XML)
public class FooContextResolver implements ContextResolver<JAXBContext> {

    private JAXBContext jc;

    public FooContextResolver() {
        try {
            jc = JAXBContext.newInstance("com.example.foo");
        } catch(JAXBException e) {
            throw new RuntimeException(e);
        } 
    }

    public JAXBContext getContext(Class<?> clazz) {
        if(Foo.class == clazz) {
            return jc;
        }
        return null;
    }

} 

示例
  • Flexible marshalling with JAXB
  • 关于rest - 如何在 CXF 中向 JAXBContext 添加其他类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19239311/

    相关文章:

    java - 使用 Spring Rest Template + Spring Web MVC 上传多部分文件(多个文件)

    java - 没有由 JAXB 生成的 @XmlRootElement

    java - 具有 StringBuffer 属性的编码对象

    java - 在 CXF wsdl2java 中设置 Java 合规性级别

    c# - WCF Restful POST 从服务器到客户端返回错误消息

    javascript - AngularJS Restful 路由

    security - 如何从 RESTful 服务发送安全 token ?

    java - 无法找到或加载主类 com.sun.tools.internal.xjc.Driver

    java - IWAB0014E 发生意外异常。尝试使用 apache cxf2.7 创建 Web 服务时

    java - CXF:为数组元素设置 minOccurs=0