概述
package com.homer.core.common.util;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.encoding.XMLType;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
/**
* 客户端调用核心wsdl工具
*/
public class WebServiceClientUtil {
private static Logger logger = LoggerFactory.getLogger(WebServiceClientUtil.class);
/**
* RPC远程调用webServices公共方法
* @param reqXml 请求报文xml
* @param logFunName 接口中文名称(日志用)
* @param serviceUrl 请求路径
* @param nameSpace 命名空间
* @param part 方法名
* @return
*/
public static String getWSDLCall(String reqXml,String logFunName,String serviceUrl,String nameSpace,String part){
String resXml = "";
long methodStartTime = System.currentTimeMillis();
try {
logger.info("[{}]请求报文reqXml=[{}]",logFunName,reqXml);
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(serviceUrl));//设置请求路径
call.setOperationName(new QName(nameSpace,part));//设置命名空间和需要调用的方法名
call.addParameter("arg0", XMLType.SOAP_STRING, ParameterMode.IN);//接口的参数
call.setReturnType(org.apache.axis.Constants.XSD_STRING);//设置返回类型
call.setOperationUse(org.apache.axis.constants.Use.LITERAL);
call.setTimeout(Integer.valueOf(60000));//设置请求超时时间 30000毫秒
resXml = (String)call.invoke(new Object[]{reqXml});
logger.info("[{}]返回报文resXml=[{}]",logFunName,resXml);
long methodEndTime = System.currentTimeMillis();
logger.info("[{}]总计耗时{}秒",logFunName,(methodEndTime-methodStartTime)/1000F);
} catch (Exception e) {
logger.error("[{}]调用接口异常:{}",logFunName,e.getMessage());
}
return resXml;
}
public static void main(String[] args) {
//调用本地
String queryUrl = "http://uat.xhdaili.com/rel/services/FCContService?wsdl";//请求路径
String nameSpace = "http://policySign.webservice.jbs.sinosoft.com";//命名空间
String localPart = "getFCContService";//需要调用的方法名
try {
String reqXml = WebServiceClientUtil.getLocalXml("D:\a.txt");
System.out.println("请求报文reqXml=n"+reqXml);
getWSDLCall(reqXml,"",queryUrl,nameSpace,localPart);//客户端调用服务端
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读取文件中的字符
*/
public static String getLocalXml(String fileName) {
String str = "";
StringBuilder sb = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(fileName));
String line;
while ((line = br.readLine()) != null) { // 循环读取流
sb.append(line.trim());
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
str= sb.toString();
return str;
}
}
pom.xml
<!-- wsdl调用使用 -->
<dependency>
<groupId>javax.xml.rpc</groupId>
<artifactId>javax.xml.rpc-api</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
</dependency>
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.2</version>
</dependency>
最后
以上就是轻松大树为你收集整理的RPC远程调用webServices公共方法的全部内容,希望文章能够帮你解决RPC远程调用webServices公共方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复