इम यकीन नहीं अगर मैं सवाल का अधिकार मिल गया है, लेकिन मुझे लगता है कि मैं दो महीने पहले अपने एक ही समस्या थी, इसलिए यहां मेरे समाधान है:
सबसे पहले आप एक HeaderHandler वर्ग की जरूरत है, जो साबुन शीर्ष लेख बनाता है
: यदि आप एक HeaderHandlerResolver हैडर निर्माण संभाल और हैंडलर श्रृंखला में सम्मिलित करने के लिए बनाने के उसके बाद
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPHeader;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
public class HeaderHandler implements SOAPHandler<SOAPMessageContext> {
public boolean handleMessage(SOAPMessageContext smc) {
Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
String AUTH_TK = "http://www.myurl.com:port/subdir/etc/";
String NOPREFIX="";//no prefix
String PREFIX_XMLNS="xmlns";
String value = "123456";
if (outboundProperty.booleanValue()) {
try {
SOAPEnvelope envelope = smc.getMessage().getSOAPPart().getEnvelope();
SOAPHeader header = envelope.addHeader();
//<AuthorizationToken xmlns="http://www.myurl.com:port/subdir/etc/">
SOAPElement authorizationToken = header.addChildElement("AuthorizationToken", PREFIX_XMLNS, AUTH_TK);
//<Token>value</Token>
SOAPElement usernameToken =
authorizationToken.addChildElement("Token", NOPREFIX);
usernameToken.addTextNode(value);
//<Token>value</Token>
SOAPElement usernameToken =
authorizationToken.addChildElement("Token", PREFIX);
usernameToken.addTextNode(value);
} catch (Exception e) {
e.printStackTrace();
}
}
return outboundProperty;
}
public Set<QName> getHeaders() {
return null;
}
public void close(MessageContext arg0) {
}
public boolean handleFault(SOAPMessageContext arg0) {
return false;
}
}
: तत्व है, यह इस तरह दिखना चाहिए
import java.util.ArrayList;
import java.util.List;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.handler.HandlerResolver;
import javax.xml.ws.handler.PortInfo;
public class HeaderHandlerResolver implements HandlerResolver {
@SuppressWarnings("unchecked")
public List<Handler> getHandlerChain(PortInfo portInfo) {
List<Handler> handlerChain = new ArrayList<Handler>();
HeaderHandler hh = new HeaderHandler();
handlerChain.add(hh);
return handlerChain;
}
}
उसके बाद, आप क्लाइंट में जोड़ें:
try{
//new service instance (your service should be extending javax.xml.ws.Service;)
YourServiceProxy service = new YourServiceProxy();
//calls the header handler resolver ;)
service.setHandlerResolver(new HeaderHandlerResolver());
//get the service
YourService port = (YourService)service.getYourService();
//call the service
port.yourMethod()
} catch (Exception e) {
e.printStackTrace();
}
वैसे, मैं इस विशेष हैडर का परीक्षण नहीं किया है, मैं पिछले एक हैडर हैंडलर मैं था संशोधित, तो यह सटीक नहीं हो सकता है, लेकिन मुझे लगता है कि यह बहुत करीब है, मुझे उम्मीद है कि यह आपकी मदद करता है, इसे आज़माएं और हमें बताएं कि यह कैसा आता है, अगर मैं अभी भी काम नहीं करता हूं तो मैं आपकी मदद करने की कोशिश करूंगा।
यह उत्तर मेरे लिए उपयोग किया गया था जब मुझे एक डब्ल्यूएस क्लाइंट में एक लॉगिंग हैडलर (अनुरोध जो अनुरोध/प्रतिक्रियाओं को लॉग करता है) स्थापित करने की आवश्यकता होती है। धन्यवाद। – riskop
हैंडलफॉल्ट विधि से झूठी वापसी का नतीजा क्या है? और getHeaders विधि से शून्य वापस करने के बारे में क्या? –
@ निकोलस डीपियाज़ा झूठी लौटने से संदेश प्रसंस्करण को अवरुद्ध कर दिया जाएगा, आप मूल रूप से कह रहे हैं "यदि यह हैंडलर पूरे संदेश को त्यागने में विफल रहता है" तो https://docs.oracle.com/javaee/5/api/javax/xml/ws/handler/ देखें हैंडलर.html # हैंडलफॉल्ट (सी) GetHeaders में शून्य वापस लौटने पर आप "यह हैंडलर कोई विशिष्ट शीर्षलेख संभाल नहीं लेता है", यही कारण है कि हमारे पास अपना स्वयं का हैंडलर रिज़ॉल्यूवर है, पीछे से आप शायद इसे वापस करके हैंडलर रिज़ॉल्वर से छुटकारा पा सकते हैं दाएं हेडर लेकिन मैंने कोशिश नहीं की है https://docs.oracle.com/javaee/5/api/javax/xml/ws/handler/soap/SOAPHandler.html#getHeaders() –