首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

Webservice中获取Servlet的相干对象

2013-08-29 
Webservice中获取Servlet的相关对象?第一种方式:通过注入WebServiceContext ,获取request、session等?packa

Webservice中获取Servlet的相关对象

?第一种方式:

通过注入WebServiceContext ,获取request、session等

?

package com.hqh.student.ws.handler;import java.util.Set;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import javax.xml.namespace.QName;import javax.xml.soap.SOAPBody;import javax.xml.soap.SOAPConstants;import javax.xml.soap.SOAPElement;import javax.xml.soap.SOAPEnvelope;import javax.xml.soap.SOAPException;import javax.xml.soap.SOAPHeader;import javax.xml.ws.WebServiceContext;import javax.xml.ws.handler.MessageContext;import javax.xml.ws.handler.soap.SOAPHandler;import javax.xml.ws.handler.soap.SOAPMessageContext;import com.hqh.student.ws.util.LoginUserContext;public class LicenseHandler implements SOAPHandler<SOAPMessageContext> {public void close(MessageContext ctx) {}public boolean handleFault(SOAPMessageContext ctx) {return false;}public boolean handleMessage(SOAPMessageContext context) {try {Boolean out = (Boolean) context.get(SOAPMessageContext.MESSAGE_OUTBOUND_PROPERTY);if(out) {System.out.println("message outing...");SOAPEnvelope soapEnv = context.getMessage().getSOAPPart().getEnvelope();SOAPBody soapBody = soapEnv.getBody();//获取当前在调用服务的哪个方法String localName = soapBody.getFirstChild().getLocalName();//System.out.println(localName);if(!"getStudent".equals(localName)) {return true;}//如果是getStudent,则加入头信息SOAPHeader soapHeader = soapEnv.getHeader();if(soapHeader==null) {soapHeader = soapEnv.addHeader();}//创建QNameString nameSpace = "http://ws.student.hqh.com";//wsdl的targetNamespaceString part = "license";//message的name,必须与wsdl中定义的一致String prefix = "ns";//前缀QName headerQName = new QName(nameSpace, part, prefix);/** * 从SOAPMessageContext中获取session中存放的信息 * 由于Handler没有被spring管理,所以获取不到HttpServletRequest *///HttpServletRequest request = (HttpServletRequest) context.get(MessageContext.SERVLET_REQUEST);//String loginUser = request.getSession().getAttribute("loginUser").toString();                                //从ThreadLocal中取出登陆用户信息String loginUser = LoginUserContext.getLoginUser();System.out.println("get loginUser from session:"+loginUser);if(loginUser==null) {System.out.println("loginUser is null");}//将QName加入Header,并设定值soapHeader.addHeaderElement(headerQName).setValue(loginUser);} else {System.out.println("message come back...");}return true;} catch (SOAPException e) {e.printStackTrace();}return false;}public Set<QName> getHeaders() {return null;}}

?

?

?

热点排行