JAXWS wsimport目录解析已经定义的“元素”错误

时间:2013-03-08 15:06:38

标签: jaxb jax-ws xjc catalog wsimport

我们正在尝试使用由第三方托管的网络服务。当我试图生成artifcats&使用wsimport的JAXB类,我遇到了以下错误。 请注意,xsd文件内容完全相似(不确定为什么会这样做),包括命名空间。然而 最后一部分servdocoid是不同的。 wsdl和schema的结构将随之而来。

[ERROR] 'ElementX' is already defined
  line # of http:/....:port/wsdl/schema1.xsd?serviceoid=123&servdocoid=<b>5</b>

[ERROR] (related to above error) the first definition appears here
  line # of http:/....:port/wsdl/schema1.xsd?serviceoid=123&servdocoid=<b>1</b>

我想我知道问题是什么,我正在尝试使用`-catalog with wsimport(不确定如果这是正确的做法),但仍然运行错误。

wsdl结构如上所述,我只突出了关键部分并忽略了休息 wsdl定义

<wsdl:definitions targetNamespace="http:/xyz.com" xmlns:soap12="http:/schemas.xmlsoap.org/wsdl/soap12/ xmlns:wsdl="http:/schemas.xmlsoap.org/wsdl/" xmlns:xsd="http:/www.w3.org/2001/XMLSchema">
...
<!-- relevant -->
<xsd:schema targetNamespace="http://schema1" xmlns:wsdl="http:/schemas.xmlsoap.org/wsdl/" xmlns:xsd="http:/www.w3.org/2001/XMLSchema xmlns:soap12="http:/schemas.xmlsoap.org/wsdl/soap12/>
  <xsd:include schemaLocation="http:/domain.com:port/wsdl/schema1.xsd?serviceoid=123&servdocoid=1" />
</xsd:schema>
...............
</wsdl:definitions>

上面wsdl中使用的模式是嵌套的,这意味着它会导入多个模式,这些模式又可以导入多个模式。假设它是一个链。

schema1.xsd

<xsd:schema elementFormDefault="qualified" targetNamespace="http:/schema1" xmlns:tns1="http:/schema1" xmlns:tns2="http:/schema2" xmlns:tns3="http:/schema3" xmlns:xsd="http:/www.w3.org/2001/XMLSchema">
....
<!-- relevant -->
<xsd:import namespace="http:/schema2" schemaLocation="http:/domain.com:port/wsdl/schema2.xsd?serviceoid=123&servdocoid=2" /> 
  <xsd:import namespace="http://schema3" schemaLocation="http:/domain.com:port/wsdl/schema3.xsd?serviceoid=123&servdocoid=3" /> 
...
</xsd:schema>

schema2.xsd

<xsd:schema elementFormDefault="qualified" targetNamespace="http:/schema2" xmlns:tns2="http:/schema2" xmlns:tns4="http://schema4"  xmlns:xsd="http:/www.w3.org/2001/XMLSchema">
...
<!-- relevant -->
 <xsd:import namespace="http:/schema4" schemaLocation="http:/domain.com:port/wsdl/schema4.xsd?serviceoid=123&servdocoid=4" /> 
...
</xsd:schema>

schema4.xsd

<xsd:schema elementFormDefault="qualified" targetNamespace="http:/schema4" xmlns:tns4="http:/schema2" xmlns:tns1="http:/schema1"  xmlns:xsd="http:/www.w3.org/2001/XMLSchema">
...
<!-- relevant -->
 <xsd:import namespace="http:/schema1" schemaLocation="http:/domain.com:port/wsdl/schema1.xsd?serviceoid=123&servdocoid=5" /> 
...
</xsd:schema>

所以这里的关键模式是schema1.xsd和schema4.xsd。两者具有完全相同的内容但具有不同的链接。话虽如此,我正在尝试使用-catalog文件让wsimport知道所有命名空间“http:/ schema1”总是解析为一个链接http:/domain.com:port / wsdl / schema1.xsd?serveoid = 123&安培; servdocoid = 1  但我仍然无法让它发挥作用。

0 个答案:

没有答案