我有普通的Microsoft Web服务和最新版本的普通CXF与Java / JDK 1.6,Eclipse等。当我运行wsdl2java时,JAXB部分抛出错误 “由JAXB引发:未定义的元素声明:schema'”
wsdl的部分导致它看起来像:
<s:element name="GetDepartmentsResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetDepartmentsResult">
<s:complexType>
<s:sequence>
<s:element ref="s:schema" />
<s:any />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
我可以简单地删除
<s:element ref="s:schema" />
到处都是<s:any/>
并保持{{1}}?它似乎是Java&lt; - &gt; Microsoft Web服务不可侵犯性的常见障碍。但我找不到CXF的任何解决方法。
谢谢
答案 0 :(得分:8)
通常您可以删除架构引用。您可能需要将<s:any>
更改为<s:any maxOccurs="2">
或类似内容,以确保架构元素及其后的所有内容都有空间。
答案 1 :(得分:0)
就个人而言,我不建议修改您的WSDL。 WSDL定义了服务强加的合同,而且您的客户端不应该改变它。如果你看一下这里的答案https://stackoverflow.com/a/19126124/1732319,它会介绍如何让wsdl2java
正确处理s:schema
。
我在项目中使用了CXF codegen maven插件并进行了以下配置:
<configuration>
<fork>once</fork>
<additionalJvmArgs>-Djavax.xml.accessExternalDTD=all -Djavax.xml.accessExternalSchema=all</additionalJvmArgs>
<sourceRoot>${project.build.directory}/generated-sources</sourceRoot>
<wsdlRoot>${basedir}/src/main/resources/wsdl</wsdlRoot>
<defaultOptions>
<bindingFiles>
<bindingFile>http://www.w3.org/2001/XMLSchema.xsd</bindingFile>
<bindingFile>${basedir}/src/main/resources/customisation.xjb</bindingFile>
</bindingFiles>
</defaultOptions>
</configuration>
customisation.xjb
取自我上面提到的答案。