2010-07-01 15 views
7

हाय जावा प्रारूप में क्लाइंट प्रोग्राम में सुरक्षा शीर्षलेख उत्पन्न करने का प्रयास कर रहा है।एक्सिस सुरक्षा शीर्षलेख

<soapenv:Header> 
<wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext> 
    <wsse:UsernameToken> 
    <wsse:Username>myUsername</wsse:Username> 
    <wsse:Password>myPassword</wsse:Password> 
    </wsse:UsernameToken> 
</wsse:Security> 
</soapenv:Header> 
निम्नलिखित कोड

SOAPHeaderElement wsseSecurity = new SOAPHeaderElement(new PrefixedQName("http://schemas.xmlsoap.org/ws/2002/04/secext","Security", "wsse")); 
MessageElement usernameToken = new MessageElement("", "wsse:UsernameToken"); 
MessageElement username = new MessageElement("", "wsse:Username"); 
MessageElement password = new MessageElement("", "wsse:Password"); 
username.setObjectValue(myProps.getProperty("username")); 
usernameToken.addChild(username); 
password.setObjectValue(myProps.getProperty("password")); 
usernameToken.addChild(password); 
wsseSecurity.addChild(usernameToken); 

BookingPort bp = bsl.getBooking(); 
((Stub) bp).setHeader(wsseSecurity); 

दुर्भाग्य से इसकी नहीं पैदा कर मैं काफी क्या चाहता था और मैं का उपयोग कर

<soapenv:Header> 
<wsse:Security soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="0" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext"> 
    <wsse:UsernameToken xmlns:wsse=""> 
    <wsse:Username xmlns:wsse="">myUsername</wsse:Username> 
    <wsse:Password xmlns:wsse="">myPassword</wsse:Password> 
    </wsse:UsernameToken> 
</wsse:Security> 
</soapenv:Header> 

दूसरे छोर पर सेवा में कोई त्रुटि

faultDetail: 
     {http://xml.apache.org/axis/}stackTrace:com.ctc.wstx.exc.WstxParsingException: Non-default namespace can not map to empty URI (as per Namespace 1.0 # 2) in XML 1.0 documents 
at [row,col {unknown-source}]: [1,450] 

मैं SOAPHeader कैसे जेनरेट करूं सभी अतिरिक्त खाली बिट्स प्रिंट आउट नहीं करने के लिए है, जिसके परिणामस्वरूप अतिरिक्त बिट्स को संभालने के लिए प्रतीत नहीं होता? चीयर्स

+0

कैसे सेवाओं ..please मेरे लिए उदाहरण कोड दे में साबुन हेडर के लिए ... जावा और अक्ष 2 1.6.7 –

उत्तर

6

आप संदेश समाप्ति के पहले तर्क के रूप में एक खाली स्ट्रिंग पास कर रहे हैं, और आपको null पास करने की आवश्यकता है। ध्यान दें कि null और खाली स्ट्रिंग ("") जावा में एक ही चीज़ नहीं है। साथ ही, आप संदेश नाम निर्माणकर्ता के स्थानीय नाम (द्वितीय) पैरामीटर में नेमस्पेस उपसर्ग को पार करके वास्तव में धोखा दे रहे हैं ... यह वह नहीं है जिसे इसके लिए डिज़ाइन किया गया है। कहा जा रहा है कि, आप नामस्थान (प्रथम) पैरामीटर के रूप में null पास करके समस्या को ठीक कर सकते हैं। आप इसे सीधे पारित करने के लिए कोशिश करते हैं, तो आप की संभावना एक अस्पष्ट निर्माता त्रुटि मिलेगी, तो जैसे कुछ निम्न करें:

SOAPHeaderElement wsseSecurity = new SOAPHeaderElement(new PrefixedQName("http://schemas.xmlsoap.org/ws/2002/04/secext","Security", "wsse")); 
String nullString = null; 
MessageElement usernameToken = new MessageElement(nullString, "wsse:UsernameToken"); 
MessageElement username = new MessageElement(nullString, "wsse:Username"); 
MessageElement password = new MessageElement(nullString, "wsse:Password"); 
username.setObjectValue(myProps.getProperty("username")); 
usernameToken.addChild(username); 
password.setObjectValue(myProps.getProperty("password")); 
usernameToken.addChild(password); 
wsseSecurity.addChild(usernameToken); 

BookingPort bp = bsl.getBooking(); 
((Stub) bp).setHeader(wsseSecurity); 

मैं भी आप एक अलग वेब सेवा इंजन (नहीं Axis2) का उपयोग की सलाह देते हैं, तो आप इस मामले में कोई विकल्प है।

2

(does not Axis2 के साथ की तरह लग ऊपर कोड) एक्सिस साथ 1. * कस्टम हेडर बनाने के लिए इस तरह का प्रयास करें

import org.apache.axis.message.SOAPHeaderElement; 
import javax.xml.soap.SOAPElement; 


public void createCustomHeader(){ 

SOAPElement oHeaderElement; 
SOAPElement oElement; 

    oHeaderElement = new SOAPHeaderElement("http://ws.mycompany.com", "securityHeader"); 
    oHeaderElement.setPrefix("sec"); 
    oHeaderElement.setMustUnderstand(false); 

    oElement = oHeaderElement.addChildElement("username"); 
    oElement.addTextNode("myusername"); 
    oElement = oHeaderElement.addChildElement("password"); 
    oElement.addTextNode("mypassword"); 

    // You can create client code something like this.. 
    MySampleServiceServiceLocator service = new MySampleServiceServiceLocator(); 
    service.setMySampleServiceEndpointAddress("endpointURL"); 
    MySampleWebService serv = service.getMySampleService(); 
    MySampleServiceSoapBindingStub stub = (MySampleServiceSoapBindingStub)serv; 

    // add this header to your stubs 
stub.setHeader(oHeaderElement); 


// Finally call your web service methid 
serv.getMyClaimStatus("XYZ001"); 


} 

//It creates the custom header like this: 

<soapenv:Header> 
    <sec:securityHeader xmlns:sec="http://ws.mycompany.com" 
     soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="0"> 
     <sec:username>myusername</sec:username> 
     <sec:password>mypassword</sec:password> 
    </sec:securityHeader> 
</soapenv:Header> 
+0

मेरे लिए काम किया, धन्यवाद! –

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