2013-02-19 2 views
2

я следующие обязательные и обслуживания элементов в моей WSDL:wsimport с HTTP: связывание

<wsdl:binding name="MyServiceSOAP11Binding" type="impl:MyServicePortType"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> 
    <wsdl:operation name="getProjects4Me"> 
     <soap:operation soapAction="getProjects4Me" style="document"/> 
     <wsdl:input> 
      <soap:body use="literal"/> 
     </wsdl:input> 
     <wsdl:output> 
      <soap:body use="literal"/> 
     </wsdl:output> 
    </wsdl:operation> 
</wsdl:binding>  

<wsdl:binding name="MyServiceHttpBinding" type="impl:MyServicePortType"> 
    <http:binding verb="POST"/> 
    <wsdl:operation name="getProjects4Me"> 
     <http:operation location="MyService/getProjects4Me"/> 
     <wsdl:input> 
      <mime:content type="text/xml" part="getProjects4Me"/> 
     </wsdl:input> 
     <wsdl:output> 
      <mime:content type="text/xml" part="getProjects4Me"/> 
     </wsdl:output> 
    </wsdl:operation> 
</wsdl:binding> 
<wsdl:service name="MyService"> 
    <wsdl:port name="MyServiceSOAP11port_http" binding="impl:MyServiceSOAP11Binding"> 
     <soap:address location="http://shop.my.com:80//services/MyService"/> 
    </wsdl:port> 
    <wsdl:port name="MyServiceHttpport" binding="impl:MyServiceHttpBinding"> 
     <http:address location="http://shop.my.com:80/services/MyService"/> 
    </wsdl:port> 
</wsdl:service> 

Когда я использую wsimport на выше WSDL, он генерирует код для «MyServiceSOAP11port_http», но не для «MyServiceHttpport». Я что-то упускаю?

Моя wsimport ANT задача:

<target name="wsimport"> 
    <exec executable="${jdk.home}/bin/wsimport"> 
     <arg line="-keep -s ../wsimportsrc -p com.sample -verbose 
     -d ../wsimportclasses ../wsdl_xsd/MyService.xml"/> 
    </exec> 
    </target> 

ответ

1

Он генерирует. Вы можете проверить файл * _Service.java. Они оба имеют одно и то же QName, но две разные конечные точки. В вашем случае было бы код, как

http://www.example.org/NewWSDLFile --> Consider this as Your Name Space 

@WebEndpoint(name = "MyServiceSOAP11port_http") 
public NewWSDLFile getNewWSDLFileSOAP1() { 
    return super.getPort(new QName("http://www.example.org/NewWSDLFile/", 
    "MyServiceSOAP11port_http"), NewWSDLFile.class); 
} 

и

@WebEndpoint(name = "MyServiceHttpport") 
public NewWSDLFile getNewWSDLFileSOAP(WebServiceFeature... features) { 
    return super.getPort(new QName("http://www.example.org/NewWSDLFile/", 
    "MyServiceHttpport"), NewWSDLFile.class, features); 
} 

Просто наличие двух портов не будет означать отдельные базы кода для каждого типа порта

+0

Не первый метод типа порта есть в MyService .class, но второй, соответствующий MyServiceHttpport, который имеет тип привязки как http, отсутствует. Я даже принудительно создал новый метод, аналогичный методу типа порта привязки SOAP, но при запуске клиента получил следующее исключение: Исключение в потоке «main» javax.xml.ws.WebServiceException: Неподдерживаемый конечный адрес: \t at com.sun.xml .internal.ws.api.pipe.TransportTubeFactory.create (Неизвестный источник) – Sandeep

+0

Я не предоставлял никаких дополнительных опций в wsimport, пока он не сгенерирован – user1428716

+0

Хорошо .. Пожалуйста, держите Correponding binding и portname одинаково .. он должен решить вашу проблему .. – user1428716