JAX-WS动态调用Web Service
来源:互联网 发布:2017网络热搜词 编辑:程序博客网 时间:2024/06/07 06:32
1、调用方式介绍
调用Web Service的Java客户端一般采用以下三种方式:
生成的stub、proxy(动态代理)以及dispatch(动态调用接口)。dispatch又分为payload和message两种方式。
这里仅就dispatch的message方式进行介绍。那好了,现在让我们一起体验WebService动态调用的好处吧!
2、动态调用WebService
废话不说,直接看代码,是非功过通过研究代码自见分晓!
动态调用的详细代码如下:
package com.majun.xml;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.soap.SOAPBinding;
public class DLLClient
{
// 名字空间
public static final String targetNamespace = "http://service.billInface.boss.gmt/";
//服务名
public static final String serName = "BillWebServiceService";
//端口名
public static final String pName = "BillWebServicePort";
//服务地址
public static final String endpointAddress = "http://localhost:8080/BillInface/BillWebServicePort?wsdl";
//方法名
public static final String OPER_NAME = "getInBillingLoginInfo";
//参数名
public static final String INPUT_NMAE = "arg0";
public static void main(String[] args) throws Exception
{
QName serviceName = new QName(targetNamespace, serName);
QName portName = new QName(targetNamespace, pName);
javax.xml.ws.Service service = Service.create(serviceName);
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
Dispatch<SOAPMessage> dispatch = service.createDispatch(portName,
SOAPMessage.class, Service.Mode.MESSAGE);
BindingProvider bp = (BindingProvider) dispatch;
Map<String, Object> rc = bp.getRequestContext();
rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, OPER_NAME);
MessageFactory factory = ((SOAPBinding)bp.getBinding()).getMessageFactory();
SOAPMessage request = factory.createMessage();
SOAPBody body = request.getSOAPBody();
QName payloadName = new QName(targetNamespace, OPER_NAME, "ns1");
SOAPBodyElement payload = body.addBodyElement(payloadName);
SOAPElement message = payload.addChildElement(INPUT_NMAE);
message.addTextNode("x");
SOAPMessage reply = null;
try
{
reply = dispatch.invoke(request);
}
catch (WebServiceException wse)
{
wse.printStackTrace();
}
SOAPBody soapBody = reply.getSOAPBody();
SOAPBodyElement nextSoapBodyElement = (SOAPBodyElement)soapBody.getChildElements().next ();
SOAPElement soapElement = (SOAPElement)nextSoapBodyElement.getChildElements().next();
System.out.println("获取回应信息为:" + soapElement.getValue());
}
}
2、再说明
有了上面的代码,相信也不需要太多的解释了,对于其中的一些wsdl知识及相关原理,请去问百度吧,最好不要去问谷歌,“科学无国界,但科学家有国籍!”,我辈小小程序员就更应该蒸不起馒头,争口气了!
哈哈,开个玩笑!百度确实不错,但是她确实不如谷歌!
程序之路确实很艰辛,比烤鸡排都艰辛!还望我们这些底层IT分子善于发掘沿途风光!
- JAX-WS动态调用Web Service
- JAX-WS动态调用Web Service
- JAX-WS Web Service
- 基于JAX-WS调用Web Service的Java客户端
- 基于JAX-WS调用Web Service的Java客户端
- 使用wsimport和JAX-WS调用Web Service接口
- JAX-WS实现web service
- JAX-WS和JAX-RPC方式调用Web Service的Java客户端
- 使用JAX-WS发布RESTful Web Service
- Developing a JAX-WS web service
- 使用JAX-WS开发Web Service
- JAX-WS实现Web Service程序
- JAX-WS的Web Service实例
- JAX-WS集成Web工程的Web Service的客户端异步调用
- JAX-WS集成Web工程的Web Service的客户端异步调用
- JAX-WS一个很简单的RPC风格的Web Service同步调用
- JAX-WS一个很简单的RPC风格的Web Service同步调用
- JAX-WS一个很简单的RPC风格的Web Service同步调用
- gsoap 在一个客户端中调用多个service的解决方案
- /LGC图形渲染/Graphics 文化系列 -- John Carmark 与 id software
- 记录一个项目中用到的货币大写转换JS函数
- Mac在企业环境中的管理瓶颈(2)
- cmake 中的 commands
- JAX-WS动态调用Web Service
- osgi 的几点知识总结
- Bash 使用技艺| 如果你每天都在使用linux系统,一定要看
- tofrodos 初步学习笔记
- Linux下tcpdump使用
- 提高solr的搜索速度
- 哈夫曼树_双缓冲实现压缩算法
- Posix多线程编程学习笔记(一)—线程基础(1)
- ff