之前用cxf调用webservice,当用wsdl2java转为本地java代码时报不支持cxf的错,搞了好久,弄不清楚是什么问题,到stackoverflow看才知道是版本的问题,只能由axis来调用了。示例代码如下:
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.apache.xerces.xs.StringList;
public class Test {
public static void main(String[] args) {
//soapaction是指wsdl的targetNamespace
String soapaction = "";
//你的webservice地址
String endpoint = "";
Service service = new Service();
try {
Call call = (Call) service.createCall();
call.setTimeout(new Integer(60000));
call.setTargetEndpointAddress(new URL(endpoint));
//你需要远程调用的方法
call.setOperationName(new QName(soapaction,"getxxxxx"));
//方法参数,如果没有参数请无视
call.addParameter(new QName(soapaction,"param1"), XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter(new QName(soapaction,"param2"), XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter(new QName(soapaction,"param3"), XMLType.XSD_STRING, ParameterMode.IN);
//设置返回类型
call.setReturnType(XMLType.XSD_STRING);
//调用方法并传递参数
String result = (String) call.invoke(new Object[]{"param1","param2","param3"});
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}