关于webservice

调用webservice接口的两种方法

第一种方式

1.通过url生成源码

进入到jdk/bin目录执行wsimport -keep url,将同目录下生成的源码拷贝到你需要用到的程序中

2.实例化service类,获取CalculateServicePortType 调用相应方法

CalculateService cs = new CalculateService();
CalculateServicePortType cspt = cs.getCalculateServiceHttpSoap11Endpoint();
float f = cspt.multiply(10, 13);


第二种方式:

不需要产生源码,但有几点需要注意

1.这几个jar包必须引入,否则程序编译或执行不通过

axis-1.4.jar
wsdl4j-1.6.2.jar(缺少时,报错:java.lang.ClassNotFoundException: javax.wsdl.OperationType)
axis-jaxrpc-1.4.jar(缺少时,Call c = (Call) s.createCall()编译不通过,原因:org.apache.axis.client.Call实现了接口javax.xml.rpc.Call,j2ee.jar中也包含这个接口,所以可以用j2ee.jar代替这个jar)
commons-logging-1.1.1.jar(Service类中会打日志,缺少时会报错)
commons-discovery.jar(缺少时,报错:java.lang.ClassNotFoundException: org.apache.commons.discovery.tools.DiscoverSingleton)

2.当使用1.5及以上jdk版本时,axis包必须是1.4及以上版本,否则Style.RPC和Use.LITERAL编译不通过,因为axis1.4以下的jar包中类路径中的enum与1.5及以上版本的jdk中的枚举关键字冲突

package mine;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;

import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.constants.Style;
import org.apache.axis.constants.Use;

public class Test {

public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException {
Service s = new Service();
Call c = (Call) s.createCall();
String servURL = "http://localhost:8080/WebServiceProject/services/CalculateService?wsdl";
c.setTargetEndpointAddress(new URL(servURL));
c.setOperationStyle(Style.RPC);
c.setOperationUse(Use.LITERAL);
c.setOperationName(new QName("http://webservice.sjtu.edu","plus"));
        Object obj = c.invoke(new Object[]{1,2});
        System.out.println(obj);
}


}

你可能感兴趣的:(webservice)