Пространство имен повторяется во всех узлах, используя axis2 и java2wdsl - PullRequest
3 голосов
/ 06 апреля 2010

Я использую фасет eclipse и axis2 1.4.1 для создания веб-сервиса. Моя проблема в том, что в процессе генерации пространства имен повторяются во всех узлах. Как вы можете видеть ниже, ns4 повторяется вместо того, чтобы быть объявленным в Узел NewOperationResponse.

Как я могу заставить java2wdsl (или eclipse) генерировать это автоматически (только в родительском или верхнем узле)? Нужно ли что-то менять на wsdl или xsd?

Спасибо!

WS Response

<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>

1010 * 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 голосов
/ 28 мая 2014

и как насчет добавления

<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>
0 голосов
/ 27 апреля 2010

В объявлении схемы wsdl переключитесь на использование elementFormDefault="uqualified" вместо использования elementFormDefault = "qualised"

...