我需要使用 <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;
}
}
示例
关于rest - 如何在 CXF 中向 JAXBContext 添加其他类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19239311/