cxf - wsdl2java不允许在xsd中声明命名空间?

时间:2012-03-06 13:25:41

标签: soap cxf

我们有一个工作wsdl2java,但xsd缺少xmlns定义和targetNamespace定义。添加wsdl2java然后打破这些错误

 <<< ERROR! 
Part <parameter> in Message <{enrollment}enrollmentResultRequestMessage> referenced Type <Enrollment> can not be found in the schemas
Part <parameter> in Message <{enrollment}enrollmentRequestMessage> referenced Type <Enrollment> can not be found in the schemas

我做的只是改变

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://yyy.com/enrollment" targetNamespace="http://yyy.com/enrollment">

我将cxf升级到2.5.2仍然无法正常工作。任何人都知道为什么这不起作用?我们需要开始使用规范的xsds,并且不希望每次都要删除命名空间。有什么想法吗?

在这种情况下我们的错误是什么(虽然它适用于xsd的第一个版本)...

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
                  xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
                  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
                  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
                  xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xmlns:tns="enrollment2"
                  xmlns:en="http://yyy.com/enrollment" 
                  targetNamespace="enrollment2">
    <wsdl:import namespace="http://yyy.com/enrollment" location="enrollment.xsd"/>

    <wsdl:types>
        <xs:schema targetNamespace="enrollment2" elementFormDefault="qualified"/>
    </wsdl:types>

感谢, 迪安

1 个答案:

答案 0 :(得分:3)

您需要使用xsd:import作为wsdl:types / xs:schema的子级来包含xsd类型。

<wsdl:types>
  <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <xsd:import namespace="http://yyy.com/enrollment" location="enrollment.xsd">
  </xsd:schema>
</wsdl:types>

话虽这么说,wsdl:import是导入另一个名称与你的命名空间不同的wsdl定义。