使用axis2和java2wdsl在所有节点中重复命名空间

时间:2010-04-06 15:33:11

标签: java web-services axis2 wsdl2java

我使用eclipse和axis2 1.4.1 facet来生成web服务。 我的问题是在生成过程中,命名空间在所有节点中重复。如下所示,重复使用ns4而不是声明 NewOperationResponse节点。

如何让java2wdsl(或eclipse)自动生成(仅在父节点或顶级节点中)? 我是否必须在wsdl或xsd上更改任何内容?

谢谢!

WS响应

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<NewOperationResponse xmlns="http://www.example.org/Test">
<out>
  <ns4:areaCode xmlns:ns4="http://www.example.org/Test/Simple">0</ns4:areaCode> 
  <ns4:exchange xmlns:ns4="http://www.example.org/Test/Simple">0</ns4:exchange> 
  <ns4:number xmlns:ns4="http://www.example.org/Test/Simple">12</ns4:number> 
</out>
</NewOperationResponse>
</soapenv:Body>
</soapenv:Envelope>

WSDL

    

 <wsdl:types>

  <xsd:schema targetNamespace="http://www.example.org/Test"
   xmlns:simple="http://www.example.org/Test/Simple" 
   elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.1">

   <xsd:import namespace="http://www.example.org/Test/Simple" schemaLocation="Simple.xsd" />
   <xsd:element name="NewOperation">
    <xsd:complexType>
     <xsd:sequence>
      <xsd:element name="in" type="xsd:string" />
     </xsd:sequence>
    </xsd:complexType>
   </xsd:element>

   <xsd:element name="NewOperationResponse">
    <xsd:complexType>
     <xsd:sequence>
      <xsd:element name="out" type="simple:Phone" />
     </xsd:sequence>
    </xsd:complexType>
   </xsd:element>

  </xsd:schema>
 </wsdl:types>

 <wsdl:message name="NewOperationRequest">
  <wsdl:part element="tns:NewOperation" name="parameters" />
 </wsdl:message>
 <wsdl:message name="NewOperationResponse">
  <wsdl:part element="tns:NewOperationResponse" name="parameters" />
 </wsdl:message>

 <wsdl:portType name="Test">
  <wsdl:operation name="NewOperation">
   <wsdl:input message="tns:NewOperationRequest" />
   <wsdl:output message="tns:NewOperationResponse" />
  </wsdl:operation>
 </wsdl:portType>
 <wsdl:binding name="TestSOAP" type="tns:Test">
  <soap:binding style="document"
   transport="http://schemas.xmlsoap.org/soap/http" />
  <wsdl:operation name="NewOperation">
   <soap:operation soapAction="" />
   <wsdl:input>
    <soap:body use="literal" />
   </wsdl:input>
   <wsdl:output>
    <soap:body use="literal" />
   </wsdl:output>
  </wsdl:operation>
 </wsdl:binding>
 <wsdl:service name="Test">
  <wsdl:port binding="tns:TestSOAP" name="TestSOAP">
   <soap:address location="http://localhost:8084/WSDLProject/services/Test" />
  </wsdl:port>
 </wsdl:service>
</wsdl:definitions>

simple.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.example.org/Test/Simple"
 xmlns:xs="http://www.w3.org/2001/XMLSchema" 
 elementFormDefault="qualified"
 attributeFormDefault="qualified">

 <xs:complexType name="Phone">
  <xs:sequence>
   <xs:element name="areaCode" type="xs:int" />
   <xs:element name="exchange" type="xs:int" />
   <xs:element name="number" type="xs:int" />
  </xs:sequence>
 </xs:complexType>
</xs:schema>

2 个答案:

答案 0 :(得分:0)

在wsdl架构声明中切换到使用elementFormDefault="uqualified"而不是使用elementFormDefault =“qualified”

答案 1 :(得分:0)

如何添加

<schema elementFormDefaultQualified="false"/> 

里面

<service>
services.xml 中的

至少这对我有用,正如您从SOAP响应中看到的那样:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:getTelalertByEscalationResponse xmlns:ns="http://ofrick.com"><return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax237:TelalertEntry"><alertDefName xsi:nil="true" /><alertId>1234</alertId><client>cwp1088</client><timeStamp>201405202254</timeStamp><tts>and this is a test tts</tts></return></ns:getTelalertByEscalationResponse></soapenv:Body></soapenv:Envelope>