使用jaxws建立webservice客户端并实现soap消息的handler验证示例
文件大小: 46k
源码售价: 10 个金币 积分规则     积分充值
资源说明:在本文中,我们将深入探讨如何使用Java API for XML Web Services (JAX-WS) 创建一个Web服务客户端,并实现SOAP消息的Handler验证。JAX-WS是Java平台标准的一部分,用于处理基于SOAP的消息交换,它提供了方便的方式来创建和消费Web服务。 我们需要使用`wsimport`工具生成客户端所需的类。这可以通过在命令行中执行以下命令来完成: ```bash wsimport -keep -extension -s ./src -p com.jaxws.test http://192.168.1.1:8080/service?wsdl ``` 这条命令会从指定的URL(这里是`http://192.168.1.1:8080/service?wsdl`)获取Web服务的WSDL(Web Service Description Language)文件,并在`com.jaxws.test`包下生成客户端所需的所有类。 生成的类包括服务接口、端点实现类、以及帮助器类等。接着,我们需要创建一个调用类,如下所示,用于实际调用Web服务的方法: ```java public String jaxws(Object[] opArgs){ ServicesService service = new ServicesService(); // 添加SOAP消息处理器 service.setHandlerResolver(new HandlerResolver() { public List getHandlerChain(PortInfo portInfo) { List handlerList = new ArrayList(); // 添加认证信息 handlerList.add(new ClientHandler()); return handlerList; } }); String result = service.getServicesPort().getResults(opArgs.toString()); // 输出结果 System.out.println(result); return result; } ``` 在这里,我们通过`setHandlerResolver`方法设置了自定义的HandlerResolver,以便在发送SOAP请求前添加特定的处理逻辑。`ClientHandler`类将负责处理出站消息(客户端发送请求时),添加必要的认证信息。 下面是`ClientHandler`类的实现: ```java package com.jaxws.test; import java.util.Set; import javax.xml.namespace.QName; import javax.xml.soap.*; 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 { @Override public boolean handleMessage(SOAPMessageContext ctx) { // 出站处理,即客户端发出请求前 Boolean request_p = (Boolean) ctx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); if (request_p) { try { SOAPMessage msg = ctx.getMessage(); SOAPEnvelope env = msg.getSOAPPart().getEnvelope(); SOAPHeader hdr = env.getHeader(); if (hdr == null) hdr = env.addHeader(); // 添加认证信息头 QName authHeaderQName = new QName("http://example.com/auth", "Authorization"); SOAPHeaderElement authHeader = hdr.addHeaderElement(authHeaderQName); authHeader.setTextContent("Bearer your_token_here"); // 其他可能的头信息可以在这里添加 } catch (SOAPException e) { e.printStackTrace(); } } return true; } // 其他SOAPHandler接口方法的默认实现 @Override public boolean handleFault(SOAPMessageContext ctx) { return true; } @Override public void close(MessageContext ctx) {} @Override public Set getHeaders() { return null; } } ``` `ClientHandler`实现了`SOAPHandler`接口,覆盖了`handleMessage`方法,当出站消息被处理时,它会在SOAP Header中添加一个名为`Authorization`的元素,用以携带认证信息。这里的`your_token_here`应当替换为实际的认证令牌。 总结来说,本示例展示了如何利用JAX-WS创建一个Web服务客户端,通过自定义`Handler`来处理SOAP消息,特别是进行认证信息的添加。这个过程对于需要对SOAP请求进行额外处理,如添加安全令牌、实现特定逻辑或验证的场景非常有用。理解并熟练掌握这些概念和步骤,将有助于开发安全、灵活的Web服务客户端。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。