मुझे पूर्ण http अनुरोध और जेएक्स-डब्ल्यूएस वेब सेवा कॉल में प्रतिक्रिया लॉग इन करने की आवश्यकता है। अनुरोध के लिए मुझे अनुरोध हेडर और शरीर और प्रतिक्रिया के लिए, प्रतिक्रिया शीर्षलेख और शरीर की आवश्यकता है।लॉग जैक्स-डब्ल्यूएस http अनुरोध और प्रतिक्रिया
कुछ शोध करने के बाद, मैंने पाया कि मैं संपत्ति के साथ इस बारे में जानकारी प्राप्त कर सकते हैं:
-Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true
और जानकारी है कि मैं जरूरत दिखाने लेकिन यह कंसोल के लिए यह उदासीनता और मैं में संग्रहीत करना होगा एक आंतरिक अनुरोध आईडी के साथ डेटाबेस।
मैं एक हैंडलर को लागू करने की कोशिश की है:
public class LoggingHandler implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleMessage(SOAPMessageContext context) {
Boolean outbound = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outbound) {
System.out.println("SOAP outbound!!!!!");
Map<String, List<String>> responseHeaders = (Map<String, List<String>>) context
.get(SOAPMessageContext.HTTP_RESPONSE_HEADERS);
try {
String headers = getHeaders(responseHeaders);
System.out.println(headers);
String body = getBody(context.getMessage());
System.out.println(body);
} catch (Exception ex) {
// TODO: What do I have to do in this case?
}
} else {
System.out.println("SOAP inbound!!!!!");
Map<String, List<String>> requestHeaders = (Map<String, List<String>>) context
.get(SOAPMessageContext.HTTP_REQUEST_HEADERS);
try {
String headers = getHeaders(requestHeaders);
System.out.println(headers);
String body = getBody(context.getMessage());
System.out.println(body);
} catch (Exception ex) {
// TODO: What do I have to do in this case?
}
}
return true;
}
private String getBody(SOAPMessage message) throws SOAPException, IOException {
OutputStream stream = new ByteArrayOutputStream();
message.writeTo(stream);
return stream.toString();
}
public String getFullHttpRequest(HttpServletRequest request) throws IOException {
InputStream in = request.getInputStream();
String encoding = request.getCharacterEncoding();
encoding = encoding == null ? "UTF-8" : encoding;
String body = IOUtils.toString(in, encoding);
return body;
}
private String getHeaders(Map<String, List<String>> headers) throws IOException {
StringBuffer result = new StringBuffer();
if (headers != null) {
for (Entry<String, List<String>> header : headers.entrySet()) {
if (header.getValue().isEmpty()) {
// I don't think this is legal, but let's just dump it,
// as the point of the dump is to uncover problems.
result.append(header.getValue());
} else {
for (String value : header.getValue()) {
result.append(header.getKey() + ": " + value);
}
}
result.append("\n");
}
}
return result.toString();
}
}
लेकिन इस मामले में, मैं http अनुरोध हेडर और शरीर प्राप्त कर सकते हैं, लेकिन जवाब में, मैं सिर्फ शरीर मिलता है, http प्रतिक्रिया हेडर हमेशा से रहे हैं खाली।
इस बारे में कोई विचार कैसे प्राप्त किया जाए? उद्देश्य डेटाबेस में पूर्ण http अनुरोध और प्रतिक्रिया को स्टोर करने में सक्षम होना है।
धन्यवाद !!
आपके उत्तर के लिए धन्यवाद। मैं टॉमकैट एप्लिकेशन सर्वर में स्प्रिंग 3 का उपयोग कर webservice प्रदान कर रहा हूं। आपका पहला प्रस्ताव, इसे सिर्फ कंसोल पर डंप करेगा, है ना? मुझे इसे डेटाबेस में और दूसरे विकल्प के बारे में स्टोर करने में सक्षम होना चाहिए, मैं इसे आज़मा दूंगा। धन्यवाद! – drublik
@drublik सुनिश्चित करें, हमें बताएं कि यह कैसे काम करता है। मैं आपके उत्तर के लिए – kolossus
धन्यवाद के लिए उत्सुक हूं लेकिन HttpServletResponse में "getHeaderNames()" विधि नहीं है। वास्तव में, ऐसा लगता है कि इसमें हेडर प्राप्त करने के लिए कोई तरीका नहीं है, केवल सेट करने के लिए। यह फ़ंक्शन केवल HttpServletRequest में है। – drublik