一、排除问题
1、今天接到一个任务,我做为客户端,调用服务端接口,通过生成wsdl文件的方式,所以用了wsimport命令,后台提示不支持soap编码
。
2、我看网上说,jdk1.7及以后就不在支持,于是我下了一个jdk1.6版本,结果还是有问题
二、解决问题
1、在网上看到说需要下载axis1.4版本的jar包,下载地址
2、下载到本地以后需要创建一个可以运行的.bat文件做一些简单配置
-- 这个是刚才下载的axis文件路径
set axis_lib=F:\axis-bin-1_4\axis-1_4\lib
set java_cmd=java -Djava.ext.dirs=%axis_lib%
-- 这个是webservice服务端地址
set axis_servlet=xxx/webservice/Service.jws?wsdl
-- 【-p】是生成文件的包路径,不加会有一个默认的,推荐加上,生成文件的同时也会把包路径一起生成。
%java_cmd% org.apache.axis.wsdl.WSDL2Java -p webservice -u %axis_servlet%
3、双击bat,就会出现下面这些文件
拷贝到项目中
如你所见,方法报错了,是因为项目中没有相应的jar包。
如果是springboot项目,很简单,只需要引入相关依赖,
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxrpc</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.2</version>
</dependency>
也可以不引入pom文件,直接手动导入jar包
4、编写调用服务端代码
String wsdl = "xxx/webservice/Service.jws?wsdl";
try {
org.apache.axis.client.Service service = new org.apache.axis.client.Service();
URL url=new URL(wsdl);
ServiceSoapBindingStub stub = new ServiceSoapBindingStub(url,service);
// 有些webservice需要登录,登陆后才能进行一些操作,这个需要设置如下两个参数:
//1、 超时时间
stub.setTimeout(1000 * 10);
//2、 次数设置true,登录后才能保持登录状态,否则第二次调用ws方法时仍然会提示未登录。
stub.setMaintainSession(true);
//目标方法
String s = stub.contractService(txt());
System.out.println(s);
System.out.println("====================== webservice调用结束 ======================");
} catch (AxisFault | MalformedURLException axisFault) {
axisFault.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
到这里就解决了。
这里做一些扩展,通常传入的参数都是xml格式的,有一种方法,在格式转换的时候,后台做字符拼接,大概是下面这种方式,但是我们传入的时候一定要包含头部信息也就是“<?xml version='1.0' encoding='UTF-8'?>”
其他标签都是看调用的服务端,他们的格式是如何规定的。
public String test() {
StringBuffer xmlnodes = new StringBuffer();
xmlnodes.append("<?xml version='1.0' encoding='UTF-8'?>");
xmlnodes.append("<ROOT>");
xmlnodes.append("<STAFF_LIST>");
xmlnodes.append("<OUTSOURCING_ID>"+"?"+"</OUTSOURCING_ID>\n" +
"\t<OUTSOURCING_DEPT_NAME>"+"?"+"</OUTSOURCING_DEPT_NAME>\n" +
"\t<OP_TYPE>"+"?"+"</OP_TYPE>\n");
xmlnodes.append("</STAFF_LIST>");
xmlnodes.append("</ROOT>");
return xmlnodes.toString();
}
有不对的地方还望指点,若能获得您的建议,倍感荣幸。