Tôi cần đăng nhập yêu cầu và đáp ứng http đầy đủ trong một cuộc gọi WebService JAX-WS. Đối với yêu cầu, tôi cần tiêu đề yêu cầu và nội dung cũng như cho phản hồi, tiêu đề phản hồi và nội dung.Đăng nhập jax-ws http yêu cầu và phản hồi
Sau khi một số nghiên cứu, tôi đã thấy rằng tôi có thể nhận được thông tin này với bất động sản:
-Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true
và hiển thị các thông tin mà tôi cần nhưng nó bãi nó vào giao diện điều khiển và tôi cần phải lưu trữ nó trong cơ sở dữ liệu với một id yêu cầu nội bộ.
Tôi đã cố gắng thực hiện một handler:
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();
}
}
nhưng trong trường hợp này, tôi có thể lấy tiêu đề yêu cầu http và cơ thể nhưng trong phản ứng, tôi chỉ nhận được cơ thể, tiêu đề phản ứng http luôn trống.
Bất kỳ ý tưởng nào về cách giải quyết vấn đề này? Mục tiêu là để có thể lưu trữ toàn bộ yêu cầu và đáp ứng http trong cơ sở dữ liệu.
Cảm ơn !!
Cảm ơn bạn đã trả lời. Tôi đang cung cấp webservice bằng cách sử dụng Spring 3 trong một máy chủ ứng dụng Tomcat. Đề nghị đầu tiên của bạn, sẽ chỉ đổ nó vào giao diện điều khiển, phải không? Tôi cần để có thể lưu trữ nó trong một cơ sở dữ liệu và liên quan đến các tùy chọn thứ hai, tôi sẽ cung cấp cho nó một thử. Cảm ơn! – drublik
@drublik chắc chắn, hãy cho chúng tôi biết cách hoạt động của nó. Tôi tò mò cho một trong những – kolossus
cảm ơn bạn đã trả lời nhưng HttpServletResponse không có phương thức "getHeaderNames()". Trong thực tế, có vẻ như nó không có bất kỳ phương pháp để có được tiêu đề, chỉ để thiết lập. Hàm này chỉ có trong HttpServletRequest. – drublik