3

Eclipseとaxis21.4.1ファセットを使用して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>
4

2 に答える 2

0

wsdlスキーマ宣言elementFormDefault="uqualified"で、elementFormDefault="qualified"を使用するのではなく使用するように切り替えます

于 2010-04-27T15:24:18.243 に答える
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>
于 2014-05-27T20:01:18.847 に答える