Microsoft Web服务和CXF客户端:JAXB无法理解“s:schema”

时间:2011-08-22 13:58:03

标签: web-services wsdl xsd cxf wsdl2java

我有普通的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的任何解决方法。

谢谢

2 个答案:

答案 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取自我上面提到的答案。