java webservice(二)
来源:互联网 发布:二手车统一发票软件 编辑:程序博客网 时间:2024/05/19 17:07
继(一)后,利用soapHead验证身份:package test;import java.util.ArrayList;import javax.jws.HandlerChain;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;import javax.jws.soap.SOAPBinding.Style;import javax.xml.ws.Endpoint;@WebService(name="hw", serviceName="hwService", targetNamespace="test")@SOAPBinding(style=Style.RPC)@HandlerChain(file="auth-handlers.xml")public class HelloWorld { @WebMethod(operationName="say") @WebResult(name="result") public String say(@WebParam(name="world") String world) { return "hello" + world; } /** * @param args */ public static void main(String[] args) { Endpoint.publish("http://localhost:9000/helloWorld", new HelloWorld()); }}
package test;import java.util.Iterator;import java.util.Set;import javax.xml.namespace.QName;import javax.xml.soap.Node;import javax.xml.soap.SOAPBody;import javax.xml.soap.SOAPConstants;import javax.xml.soap.SOAPEnvelope;import javax.xml.soap.SOAPException;import javax.xml.soap.SOAPFault;import javax.xml.soap.SOAPHeader;import javax.xml.soap.SOAPMessage;import javax.xml.ws.handler.MessageContext;import javax.xml.ws.handler.soap.SOAPHandler;import javax.xml.ws.handler.soap.SOAPMessageContext;import javax.xml.ws.soap.SOAPFaultException;public class AuthHandler implements SOAPHandler<SOAPMessageContext>{ @Override public Set<QName> getHeaders() { return null; } @Override public void close(MessageContext context) { } public boolean handleMessage(SOAPMessageContext context) { // 一次请求会进入这个方法两次, 一次进来前处理,一次返回前处理 boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); if (!isRequest) { try { SOAPMessage soapMsg = context.getMessage(); soapMsg.writeTo(System.out); System.out.println(); SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope(); SOAPHeader soapHeader = soapEnv.getHeader(); if (soapHeader == null) { soapHeader = soapEnv.addHeader(); generateSOAPErrMessage(soapMsg, "No SOAP header."); } Iterator<?> it = soapHeader.extractHeaderElements(SOAPConstants.URI_SOAP_ACTOR_NEXT); if (it == null || !it.hasNext()) { generateSOAPErrMessage(soapMsg, "No header block for next actor."); } while (it.hasNext()) { Node node = (Node) it.next(); if ("auth".equals(node.getNodeName()) && "admin".equals(node.getValue())) return true; } generateSOAPErrMessage(soapMsg, "invalid user"); } catch (Exception e) { e.printStackTrace(); } } return false; } private void generateSOAPErrMessage(SOAPMessage msg, String reason) throws SOAPException { SOAPBody soapBody = msg.getSOAPPart().getEnvelope().getBody(); SOAPFault soapFault = soapBody.addFault(); soapFault.setFaultString(reason); throw new SOAPFaultException(soapFault); } @Override public boolean handleFault(SOAPMessageContext context) { return false; } }
package test;import java.util.Set;import javax.xml.namespace.QName;import javax.xml.soap.SOAPConstants;import javax.xml.soap.SOAPEnvelope;import javax.xml.soap.SOAPHeader;import javax.xml.soap.SOAPHeaderElement;import javax.xml.soap.SOAPMessage;import javax.xml.ws.handler.MessageContext;import javax.xml.ws.handler.soap.SOAPHandler;import javax.xml.ws.handler.soap.SOAPMessageContext;public class ClientHandler implements SOAPHandler<SOAPMessageContext>{ @Override public Set<QName> getHeaders() { return null; } @Override public void close(MessageContext context) { } public boolean handleMessage(SOAPMessageContext context) { boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); if (isRequest) { try { SOAPMessage soapMsg = context.getMessage(); SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope(); SOAPHeader soapHeader = soapEnv.getHeader(); if (soapHeader == null) { soapHeader = soapEnv.addHeader(); } QName qName = new QName("http://test", "auth"); SOAPHeaderElement soapHeaderElement = soapHeader.addHeaderElement(qName); soapHeaderElement.setActor(SOAPConstants.URI_SOAP_ACTOR_NEXT); soapHeaderElement.addTextNode("admin"); soapMsg.saveChanges(); soapMsg.writeTo(System.out); System.out.println(); } catch (Exception e) { e.printStackTrace(); } } return true; } @Override public boolean handleFault(SOAPMessageContext context) { return false; } }
<?xml version="1.0" encoding="UTF-8"?><handler-chains xmlns="http://java.sun.com/xml/ns/javaee"> <handler-chain> <handler> <handler-name>test</handler-name> <handler-class>test.ClientHandler</handler-class> </handler> </handler-chain></handler-chains>
<?xml version="1.0" encoding="UTF-8"?><handler-chains xmlns="http://java.sun.com/xml/ns/javaee"> <handler-chain> <handler> <handler-name>test</handler-name> <handler-class>test.AuthHandler</handler-class> </handler> </handler-chain></handler-chains>
http://blog.csdn.net/small____fish/article/details/8209896
http://blog.csdn.net/rangqiwei/article/details/19282271
0 0
- java webservice(二)
- SAP&Java WebService(二) ----ABAP调用SAP生成的WebService
- flex与java通信二:webService
- Java WebService学习笔记 - Axis进阶(二)
- Java EE+axis2搭建webservice服务(二)
- Java调用.net开发的webservice(二)
- JAVA RESTful WebService实战笔记(二)
- WebService(二)
- WebService介绍(二):发现WebService
- webservice(二)webservice基本原理
- xFire实现Java间自定义类型的WebService调用(二)
- Java调用架构于C#下的WebService实例二
- xFire实现Java间自定义类型的WebService调用(二)
- 【webservice】调试方法篇(二、java的http请求)
- 基于java api 和 servlet发布WebService(二)
- [Java] Webservice之定制发布WSDD教程 (二)
- webService之(二)java原生态客户端
- java使用soap方式简单实现webservice (二)
- 信息学习22
- each方法的几种用法
- Linux内核开发之异步通知与异步I/O(一)
- Comet框架 CometD
- What's the difference between USBSAMP and OSRUSBFX2 sample?
- java webservice(二)
- 菜鸟进化史
- C# XML序列化实例学习:XmlSerializer
- Android工程中的armeabi与armeabi-v7a
- vs2010无法打开项目文件,此安装不支持该项目类型解决方法
- c#完整读写文件
- Best localrc for devstack
- 在Coxoa和Objextive-C中使用Swift(1)Basic Setup
- [译]class android.media.MediaPlayer