java – 使用wsimport导入WSDL时为xsd:any元素提供模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用wsimport导入WSDL时为xsd:any元素提供模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2717字,纯文字阅读大概需要4分钟。
内容图文
![java – 使用wsimport导入WSDL时为xsd:any元素提供模式](/upload/InfoBanner/zyjiaocheng/778/8df1ee52436a4fe2b12fdd33d204b9d6.jpg)
我有一个WSDL,在其中一个方法的返回类型中使用xsd:any元素,如下所示:
<xs:element name="Method_XMLResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Method_XMLResult">
<xs:complexType mixed="true">
<xs:sequence>
<xs:any/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
当我通过wsimport工具运行WSDL时,我得到一个生成的类,其中包含xs:any字段映射为对象列表:
public static class MethodXMLResult {
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
}
当使用生成的代码调用服务时,我在内容列表中获取了org.w3c.dom.Node的实例(准确地说是com.sun.org.apache.xerces.internal.dom.ElementNSImpl),我需要解析它我.但是,我为实际返回的对象提供了一个单独的外部模式文档 – 我试图以某种方式将其提供给wsimport,因此它也为它们生成了类.
我试图通过这样的JAX-WS / JAXB定制文件来实现这一点:
<jaxws:bindings xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:a="http://www.w3.org/2001/XMLSchema"
wsdlLocation="wsdlLocation.wsdl">
<jaxws:bindings node="wsdl:definitions">
<jaxws:bindings node="wsdl:types" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb">
<jaxws:bindings node="//s:schema[@targetNamespace='wsNamespace']">
<jaxb:bindings node="//s:element[@name='Method_XMLResponse']//s:any">
...
</jaxb:bindings>
</jaxws:bindings>
</jaxws:bindings>
</jaxws:bindings>
</jaxws:bindings>
看起来像wsimport选择正确的位置进行自定义(在WSDL中给出了许多错误的错误信息,但是我无法弄清楚如何填充< jaxb:bindings>使wsimport从外部模式生成类的元素.它甚至可能吗?任何帮助将非常感激.
解决方法:
我看到你在XSD中使用xs:any的混合类型.我认为在JAXB调整之后对混合类型进行有用的优化:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0"
xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc" jaxb:extensionBindingPrefixes="xjc">
<jaxb:globalBindings generateMixedExtensions="true"/>
</jaxb:bindings>
您可以将外部JAXB绑定文件添加到wsimport whith -b parameter.
我认为您可以通过以下方式调整xs:any:
Skip shema:
<xs:any processContents="skip" maxOccurs="unbounded" minOccurs="0" />
跳过绑定:
@XmlAnyElement
public List<Element> getAny();
严格的架构:
<xs:any maxOccurs="unbounded" minOccurs="0" />
严格约束:
@XmlAnyElement(lax=true)
public List<Object> getAny();
和:
with processContents=lax means any XML elements can be
placed here, but if their element names match those defined in the
schema, they have to be valid. XJC actually handles this exactly like
processContents=’strict’, since the strict binding allows unknown
elements anyway.
您可以阅读有关in this link.的更多信息
可能有助于这个答案来完成您的JAX-WS / JAXB自定义文件.
内容总结
以上是互联网集市为您收集整理的java – 使用wsimport导入WSDL时为xsd:any元素提供模式全部内容,希望文章能够帮你解决java – 使用wsimport导入WSDL时为xsd:any元素提供模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。