使用 JAXB 解组 SOAP 会使任何元素为空 (null)
我正在使用 JAXB 解组 SOAP 消息,虽然大部分消息在解组时看起来都很好,但当其内容应为纯文本时,有一个元素为 null。如果我将其内容更改为 xml(例如
,它工作正常。
我相信描述这部分的架构如下:
<xsd:complexType name="NotificationMessageHolderType" >
<xsd:sequence>
<xsd:element name="Topic"
type="wsnt:TopicExpressionType"
minOccurs="1" maxOccurs="1" />
<xsd:element name="ProducerReference"
type="wsa:EndpointReferenceType"
minOccurs="1" maxOccurs="1" />
<xsd:element name="Message" type="xsd:anyType"
minOccurs="1" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
问题出在中的 LAST 元素这个架构,Message 元素,它的类型是“xsd:anyType”,这是否意味着它可以容纳任何内容?但是当使用 JAXB 解组时,任何非结构化内容(逐字)文本)似乎被省略了。
我可以采取什么措施来纠正这种情况?
有谁知道为什么, 埃夫莱特
I'm unmarshalling a SOAP-message with JAXB, and while most of the message looks fine when unmarshalled, one element is null when its content should be plain text. If I change its content to xml (e.g. <Test> Something </test>
, it works fine.
I beleive the schema describing this part is the following:
<xsd:complexType name="NotificationMessageHolderType" >
<xsd:sequence>
<xsd:element name="Topic"
type="wsnt:TopicExpressionType"
minOccurs="1" maxOccurs="1" />
<xsd:element name="ProducerReference"
type="wsa:EndpointReferenceType"
minOccurs="1" maxOccurs="1" />
<xsd:element name="Message" type="xsd:anyType"
minOccurs="1" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
The problem is with the LAST element in this schema, the Message element. Its type is "xsd:anyType", doesn't that mean it could hold anything? But when unmarshalling with JAXB, any non-structured content (verbatim text) seems to get omitted.
Does anybody know why, and what I might do to remedy the situation?
Regards,
Eflite
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
此页面(注意,回程机存档项目)是寻找答案的最佳位置;它提供了一个关于如何解决您的场景的清晰示例。
我引用那里的内容:
“如果您需要编组任意内容,则必须根据 org.w3c.dom 创建内容树。Sun 的 JAXB 当前使用 Apache 的 Xerces 的实现,即类 apache.xerces.internal.dom.ElementNSImpl .”
This page(note, wayback machine archived item) is the best place to look for the answer; it provides a clear example on how to address your scenario.
I am quoting from there:
"If you need to marshal arbitrary content you'll have to create a content tree according to org.w3c.dom. Sun's JAXB currently uses the implementation from Apache's Xerces, i.e., class apache.xerces.internal.dom.ElementNSImpl."