我有一些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类

10-05 18:54