java xml名称空间_java – 使用带有名称空间和模式的Jaxb进行XML解组

我有一个

XML文档,如下所示:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.myCompany.com msgdata.xsd">

MsgID001

hlkJKLHljkhkjlHKJLHkjl6y987HJKH

还向我发送了一个模式文档(称为msgdata.xsd).我正在使用JAXB将上述xml文档解组为Java对象.

解组代码如下所示:

final JAXBContext context = JAXBContext.newInstance(clazz);

SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

Schema schema = sf.newSchema(new File("C:\\temp\\msgdata.xsd"));

final Unmarshaller unmarshaller = context.createUnmarshaller();

unmarshaller.setSchema(schema);

return (T) unmarshaller.unmarshal(new StringReader(xml));

XML的目标对象如下所示(然后将对象转换为休眠实体.

@XmlRootElement(name = "msgdata")

public class Message {

private String msgid;

private String msgHash;

@XmlElement(name = "msgid")

public String getMsgid() {

return msgid;

}

public void setMsgid(String msgid) {

this.msgid = msgid;

}

@XmlElement(name = "msgHash")

public String getMsgHash() {

return msgHash;

}

public void setMsgHash(String msgHash) {

this.msgHash = msgHash;

}

几个问题:

>我有一个休息服务,我将收到上面显示格式的XML文档.架构文档的参考是什么.我知道架构文档用于验证XML文档.我认为它的工作方式是我使用该模式来验证我通过REST服务收到的XML文档.现在的问题是我如何访问架构?我只是将它存储在我的文件系统上并访问它,如上所示?

XML文档具有对模式的引用(请参阅schemaLocation条目).它如何在我的文件系统上找到架构文档? XML文档中是否需要该模式引用?

>现在的XML文档无法解组.当我尝试解组时,我收到以下错误:

Caused by: javax.xml.bind.UnmarshalException: unexpected element

(uri:”http://www.myCompany.com”,local:”msgdata”). Expected elements

are

at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:662)

[jaxb-impl-2.2.4.jar:]

at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:258)

[jaxb-impl-2.2.4.jar:]

at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:253)

[jaxb-impl-2.2.4.jar:]

at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:120)

[jaxb-impl-2.2.4.jar:]

at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1063)

[jaxb-impl-2.2.4.jar:]

at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:498)

[jaxb-impl-2.2.4.jar:]

at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:480)

[jaxb-impl-2.2.4.jar:]

at com.sun.xml.bind.v2.runtime.unmarshaller.ValidatingUnmarshaller.startElement(ValidatingUnmarshaller.java:102)

[jaxb-impl-2.2.4.jar:]

at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:150)

[jaxb-impl-2.2.4.jar:]

at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown

Source) [xercesImpl-2.9.1.jar:]

at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown

Source) [xercesImpl-2.9.1.jar:]

at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown

Source) [xercesImpl-2.9.1.jar:]

at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown

Source) [xercesImpl-2.9.1.jar:]

at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown

Source) [xercesImpl-2.9.1.jar:]

at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) [xercesImpl-2.9.1.jar:]

at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) [xercesImpl-2.9.1.jar:]

at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) [xercesImpl-2.9.1.jar:]

at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) [xercesImpl-2.9.1.jar:]

at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown

Source) [xercesImpl-2.9.1.jar:]

at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:217)

[jaxb-impl-2.2.4.jar:]

at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:189)

[jaxb-impl-2.2.4.jar:]

at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:136)

[jboss-jaxb-api_2.2_spec-1.0.3.Final.jar:1.0.3.Final]

at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:193)

[jboss-jaxb-api_2.2_spec-1.0.3.Final.jar:1.0.3.Final]

… 31 more

我认为命名空间是在xml文档中定义的.我要么没有正确使用架构,要么命名空间定义不正确.我究竟做错了什么?

谢谢.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值