java发布webservice常用的CXF和axis2,业务上需要获取客户端请求头信息
首先CXF实现的webservice获取HttpServletRequest方法,注入jdk中WebServiceContext就可以直接获取
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.BindingType;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.soap.SOAPBinding;
import java.util.Enumeration;
@Component
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
@WebService(serviceName="MessagePackService", //对外发布的服务名
targetNamespace="http://webservice.xxxxxxxxxxxxxxx.com/", //指定你想要的名称空间,通常使用使用包名反转
endpointInterface="com.xxxxxxxxxxxxxxxx.webservice.MessagePackService")
@Slf4j
public class MessagePackServiceImpl implements MessagePackService {
// 获取HttpServletRequest
@Resource
private WebServiceContext webServiceContext;
@Override
public String sayHello(String userName) {
HttpServletRequest request = (HttpServletRequest) webServiceContext.getMessageContext().get(MessageContext.SERVLET_REQUEST);
Enumeration<String> headerNames = request.getHeaderNames();
System.out.println(headerNames);
System.out.println(userName);
return userName;
}
}
axis2实现的webservice获取HttpServletRequest方法,需要引入axis2的MessageContext
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.transport.http.HTTPConstants;
import java.util.Enumeration;
@Service
public class MessagePackageImpl implements IMessagePackage {
@Override
public String test(String collectionEntity) {
MessageContext mc = MessageContext.getCurrentMessageContext();
HttpServletRequest request = (HttpServletRequest)mc.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
Enumeration<String> headerNames = request.getHeaderNames();
System.out.println(headerNames);
return collectionEntity.toString();
}
}