您的位置:首页 > 编程语言 > Java开发

java AXIS2动态调用WCF webservice

2013-02-05 12:02 459 查看
所需jar包:

import java.net.MalformedURLException;
import java.rmi.RemoteException;
import java.util.HashMap;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;


  另外还需要一个commons-discovery-0.2.jar这个包,作用:用来发现、查找和实现可插入式接口,提供一些一般类实例化、单件的生命周期管理的常用方法。

调用WCF服务的时候,特别要注意参数的问题。需要传输的参数包括:服务wsdl地址,SOAP Action地址,方法名,方法变量名,方法参数值。
通过org.apache.axis.client.Call下面的setTargetEndpointAddress(new java.net.URL(endpoint));来设置wsdl地址,通过addParameter(new QName(namespaceURI,parameterName),org.apache.axis.Constants.XSD_STRING,ParameterMode.IN)来设置方法变量名,并说明这是一个传入参数,通过setReturnType(org.apache.axis.Constants.XSD_STRING)来设置方法返回类型,通过invoke(new java.lang.Object[] {parameterValue});动态调用方法,并传递参数值。

[b][b]代码如下:[/b][/b]

/**
* axis2 client动态调用WCF webservice
* @param endpoint wsdl地址,如http://172.16.5.21/WcfService2/Service1.svc?wsdl
* @param SOAPActionURI 调用的方法action地址如"wsdl:input wsaw:Action="http://tempuri.org/IService1/GetData1" message="tns:IService1_GetData1_InputMessage"
* @param namespaceURI命名空间如targetNamespace="http://tempuri.org/"
* @param methodName方法名如wsdl:operation name="GetData1"
* @param parameterName方法变量名
* @param parameterValue方法变量值
* @return返回值
* @throws ServiceException
* @throws MalformedURLException
* @throws RemoteException
*/
public static String invokeWCF(String endpoint,String SOAPActionURI,String namespaceURI,String methodName,String parameterName,String parameterValue)
throws ServiceException, MalformedURLException, RemoteException
{

List<HashMap<String, Object>> mList = new ArrayList<HashMap<String,Object>>();
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.addParameter(new QName(namespaceURI,parameterName),org.apache.axis.Constants.XSD_STRING,ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
call.setUseSOAPAction(true);
call.setSOAPActionURI(SOAPActionURI);
call.setOperationName(new QName(namespaceURI, methodName));
String remsg=(String) call.invoke(new java.lang.Object[] {parameterValue});
return remsg;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: