我有一些xsd模式example.xsd,在其中创建了pojo类(由Jaxb IntellIj Idea自动尝试,或手动尝试)。
我的目的是为我的spring jms服务序列化pojo并在发送之前针对xsd验证一个。
//init marshaller
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
....
marshaller.setSchema(new ClassPathResource("/example.xsd"));
marshaller.afterPropertiesSet();
//trying to serialize
MyResponse res = new MyResponse();
Jaxb2Marshaller jaxb2Marshaller = jaxb2MarshallerGenerated();
OutputStream outputStream = new ByteArrayOutputStream();
jaxb2Marshaller.marshal(res, new StreamResult(outputStream));
我的XSD看起来像
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="http://example/schemas">
<xs:element xmlns:sch="http://example/schemas" name="myResponse" type="sch:myResponseType"/>
<xs:complexType name="myResponseType">
<xs:sequence>
....
</xs:sequence>
....
我的POJO类如下:
@XmlRootElement
public class MyResponse {
//some jaxb stuff
}
我无法摆脱异常:
找不到元素'myResponse的声明
我尝试了没有名称空间和其他方式。
最佳答案
问题是我序列化为xml的POJO在根元素上没有名称空间。
XSD->在Idea固定的一个位置创建Java类