我使用Maven插件(org.codehaus.mojo> axistools-maven-plugin)+一个WSDL文件来生成Soap Web服务.
目标/ generated-source/wsdl2java/com.comp.proj中的Genarated文件是:
在我的项目中,我FooSoapBindingImpl.java在一个具有相同名称的包中创建+在此java实现中添加我的自定义代码.
此Web服务已准备好用于生产.
所以,今天我在我的客户端添加基本身份验证(header => Authorization:Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ ==)
如何在我的Axis Web服务中添加对此基本身份验证的检查?
我需要在JAX-WS WebService调用中记录完整的http请求和响应.对于请求,我需要请求标头和正文以及响应,响应标头和正文.
经过一番研究,我发现我可以通过该属性获取此信息:
-Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true
Run Code Online (Sandbox Code Playgroud)
并显示我需要的信息,但它将其转储到控制台,我需要将其存储在具有内部请求ID的数据库中.
我试图实现一个处理程序:
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 { …Run Code Online (Sandbox Code Playgroud)