2011-08-31 20 views
17

मैं 'wsimport' का उपयोग कर wsdl से क्लाइंट जावा कोड उत्पन्न कर रहा हूं। इसwsimport साबुन हेडर से संबंधित कोड उत्पन्न नहीं करता

<?xml version="1.0" encoding="utf-8"?> 
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://www.test.com/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://www.test.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 
    <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Test session web service methods.</wsdl:documentation> 
    <wsdl:types> 
    <s:schema elementFormDefault="qualified" targetNamespace="http://www.test.com/"> 
     <s:element name="Logon"> 
     <s:complexType> 
      <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="user" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="organisation" type="s:string" /> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 
     <s:element name="LogonResponse"> 
     <s:complexType> 
      <s:sequence> 
      <s:element minOccurs="1" maxOccurs="1" name="LogonResult" type="tns:LogonResult" /> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 
     <s:simpleType name="LogonResult"> 
     <s:restriction base="s:string"> 
      <s:enumeration value="Ok" /> 
      <s:enumeration value="Error" /> 
     </s:restriction> 
     </s:simpleType> 
     <s:element name="Header" type="tns:Header" /> 
     <s:complexType name="Header"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="SessionID" type="s:string" /> 
     </s:sequence> 
     <s:anyAttribute /> 
     </s:complexType> 
     <s:element name="RunTask"> 
     <s:complexType> 
      <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="argument" type="s:string" /> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 
     <s:element name="RunTaskResponse"> 
     <s:complexType> 
      <s:sequence> 
      <s:element minOccurs="1" maxOccurs="1" name="RunTaskResult" type="tns:RunTaskResult" /> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 
     <s:simpleType name="RunTaskResult"> 
     <s:restriction base="s:string"> 
      <s:enumeration value="Ok" /> 
      <s:enumeration value="Error" /> 
     </s:restriction> 
     </s:simpleType> 
    </s:schema> 
    </wsdl:types> 
    <wsdl:message name="LogonSoapIn"> 
    <wsdl:part name="parameters" element="tns:Logon" /> 
    </wsdl:message> 
    <wsdl:message name="LogonSoapOut"> 
    <wsdl:part name="parameters" element="tns:LogonResponse" /> 
    </wsdl:message> 
    <wsdl:message name="LogonHeader"> 
    <wsdl:part name="Header" element="tns:Header" /> 
    </wsdl:message> 
    <wsdl:message name="RunTaskSoapIn"> 
    <wsdl:part name="parameters" element="tns:RunTask" /> 
    </wsdl:message> 
    <wsdl:message name="RunTaskSoapOut"> 
    <wsdl:part name="parameters" element="tns:RunTaskResponse" /> 
    </wsdl:message> 
    <wsdl:message name="RunTaskHeader"> 
    <wsdl:part name="Header" element="tns:Header" /> 
    </wsdl:message> 
    <wsdl:portType name="SessionSoap"> 
    <wsdl:operation name="Logon"> 
     <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Logs on with the user credentials.</wsdl:documentation> 
     <wsdl:input message="tns:LogonSoapIn" /> 
     <wsdl:output message="tns:LogonSoapOut" /> 
    </wsdl:operation> 
    <wsdl:operation name="RunTask"> 
     <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Runs a task.</wsdl:documentation> 
     <wsdl:input message="tns:RunTaskSoapIn" /> 
     <wsdl:output message="tns:RunTaskSoapOut" /> 
    </wsdl:operation> 
    </wsdl:portType> 
    <wsdl:binding name="SessionSoap" type="tns:SessionSoap"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
    <wsdl:operation name="Logon"> 
     <soap:operation soapAction="http://www.test.com/Logon" style="document" /> 
     <wsdl:input> 
     <soap:body use="literal" /> 
     </wsdl:input> 
     <wsdl:output> 
     <soap:body use="literal" /> 
     <soap:header message="tns:LogonHeader" part="Header" use="literal" /> 
     </wsdl:output> 
    </wsdl:operation> 
    <wsdl:operation name="RunTask"> 
     <soap:operation soapAction="http://www.test.com/RunTask" style="document" /> 
     <wsdl:input> 
     <soap:body use="literal" /> 
     <soap:header message="tns:RunTaskHeader" part="Header" use="literal" /> 
     </wsdl:input> 
     <wsdl:output> 
     <soap:body use="literal" /> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:service name="Session"> 
    <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Test session web service methods.</wsdl:documentation> 
    <wsdl:port name="SessionSoap" binding="tns:SessionSoap"> 
     <soap:address location="https://login.test.com/webservices/session.asmx" /> 
    </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

यह बताता है कि एक अनुरोध लॉगऑन संदेश इस

<?xml version="1.0"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XmlSchema-instance" xmlns:xsd="http://www.w3.org/2001/XmlSchema"> 
    <soap:Body> 
    <Logon xmlns="http://www.test.com/"> 
     <user>its_me</user> 
     <password>its_my_pwd</password> 
     <organisation>my_org</organisation> 
    </Logon> 
    </soap:Body> 
</soap:Envelope> 

और इस

<?xml version="1.0"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Header> 
    <Header xmlns="http://www.test.com/"> 
     <SessionID>ddffdf334-217d-41bb-9d7e-6289fefa8aaf</SessionID> 
    </Header> 
    </soap:Header> 
    <soap:Body> 
    <LogonResponse xmlns="http://www.test.com/"> 
     <LogonResult>Ok</LogonResult> 
    </LogonResponse> 
    </soap:Body> 
</soap:Envelope> 
+11

हाँ, मैंने इसे स्वयं पाया। विकल्प '-XadditionalHeaders' को wsimport कमांड में जोड़ने से समस्या हल हो गई। यह विधि के लिए एक अतिरिक्त तर्क उत्पन्न करता है जिसके माध्यम से हेडर को पास/पुनर्प्राप्त किया जा सकता है। मैंने सवाल नहीं हटाया क्योंकि मैं इस समाधान को ढेर ओवरफ्लो पर नहीं ढूंढ पाया था और ऐसा उपयोगी हो सकता है – thehpi

+1

धन्यवाद! .. ps: यह Google पर "wsimport सेटिंग शीर्षलेख" के लिए शीर्ष हिट है! –

उत्तर

1

मैं की तरह प्रतिक्रिया कैसा दिखेगा की तरह आपरेशन परिभाषाओं में हैडर: wsdl साबुन है टिप्पणी नहीं कर सका इसलिए मैं इसे यहां "उत्तर" के रूप में लिख रहा हूं।

मैं उसी स्थिति में भाग गया जहां लिफाफे में केवल शरीर था। हालांकि '-XadditionalHeaders' तर्क जोड़ने के बाद, wsimport ने अभी भी हेडर तर्कों के साथ सेवा विधियों को उत्पन्न करने से इंकार कर दिया। मैं इंटरनेट पर खोज की है और दिए गए लिंक में एक मैनुअल पैच पाया:

https://metro.java.net/2.0/guide/SOAP_headers.html

मैं कोड में ऐसा नहीं किया। इसके बजाय मैंने अनुरोध हेडर के लिए तर्क जोड़कर और उन्हें @WebParam(header=true) के साथ एनोटेट करके वेब सेवा संचालन विधि के विधि हस्ताक्षर को बदल दिया। मैंने इसे वास्तविक वेब सेवा सर्वर के साथ परीक्षण नहीं किया है, लेकिन कम से कम एसओएपी संदेश अब सही दिखता है (अब सिरदर्द नहीं)।

0

-exsh (सही/गलत)

सक्षम या अंतर्निहित सोप ​​हेडर के प्रसंस्करण (यानी सोप हेडर wsdl में परिभाषित: बाध्यकारी नहीं बल्कि wsdl:। PortType अनुभाग) को निष्क्रिय सोप हेडर का संसाधन सोप बाध्यकारी जार की आवश्यकता है क्लासपाथ पर उपलब्ध है जो सीएक्सएफ 2.4.एक्स और पुराने में डिफ़ॉल्ट नहीं था। इस ध्वज के काम के लिए आपको cxf-rt-binding-soap पर निर्भरता जोड़ने की आवश्यकता हो सकती है। डिफ़ॉल्ट गलत है।

संबंधित मुद्दे