idea搭建webService工程完全可以看这个老哥的博客,写得蛮清楚的:https://blog.csdn.net/qq_21399933/article/details/78797071
我发送的接口:
package example;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService(targetNamespace = "HelloWorldWS")
public class HelloWorld {
@WebMethod
public String sayHelloWorldFrom(@WebParam(name="from")String from) {
String result = "Hello, world, from " + from;
System.out.println(result);
return result;
}
public static void main(String[] argv) {
Object implementor = new HelloWorld ();
String address = "http://localhost:9000/HelloWorld";
Endpoint.publish(address, implementor);
}
}
这边主要写一下如何用axis作为客户端调用发布的接口。
我用的是maven工程,pom.xml文件里加加入:
<!-- webService -->
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>javax.xml.rpc</groupId>
<artifactId>javax.xml.rpc-api</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.bundles</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.4_1</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
客户端类:
package com.test.webService;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class WebServiceClient {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:9000/HelloWorld?wsdl";
//直接引用远程的wsdl文件
//以下都是套路
Service service = new Service();
Call call = (Call) service.createCall();
call.setEncodingStyle("UTF-8");
call.setTargetEndpointAddress(endpoint);
//call.setOperationName("sayHelloWorldFrom");//WSDL里面描述的接口名称
call.setOperationName(new javax.xml.namespace.QName("HelloWorldWS", "sayHelloWorldFrom"));
call.addParameter("from", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);//接口的参数
//call.addParameter("from", XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
String temp = "测试人员";
String result = (String) call.invoke(new Object[]{temp});//给方法传递参数,并且调用方法
System.out.println("result is " + result);
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
注意:之前没写@WebParam(name="from")发现传参怎么都传不上,一直未null,原来参数不能写具体的参数名,要写为:arg0,arg1,arg2...