使用wsimport生成代码(不推荐)
配置java环境变量后在命令窗口中输入
-keep:是否生成java源文件
-d:指定.class文件的输出目录
-s:指定.java文件的输出目录
-p:定义生成类的包名,不定义的话有默认包名
-verbose:在控制台显示输出信息
-b:指定jaxws/jaxb绑定文件或额外的schemas
-extension:使用扩展来支持SOAP1.2
wsimport -encoding utf-8 -s D:\存放目录\ -p com.ws.cli -XadditionalHeaders -verbose http://localhost/xxxx/xxxx?wsdl
即可生成Java代码,然后将代码拷贝到项目中,直接调用即可。
但这样生成的代码不够灵活,如果对方接口参数修改了,需要重新生成代码,不建议使用。
使用Axis-1.4 动态调用
代码中使用的axis版本为1.4,需要注意的是不同版本的Axis相差很大,下面是调用代码
/**
* Axis动态调用wsdl
*
* @param wsdlUrl 服务地址
* @param targetNamespace 服务命名空间
* @param operationMethodName 接口方法名
* @param bodyParams body参数 <参数名,参数值>
* @param headerParams header参数 <参数名,参数值> (可为空)
* @param loadPart loadPart(设置header时才需要)
* @return T
*/
public static <T> T invokeWebservice_axis(String wsdlUrl, String targetNamespace,
String operationMethodName,
Map<String, Object> bodyParams,
Map<String, String> headerParams,
String loadPart) {
try {
//引用远程的wsdl文件
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(wsdlUrl);
//接口名
call.setOperationName(new QName(targetNamespace, operationMethodName));
//由于需要认证,故需要设置头部调用的密钥
if (headerParams != null && headerParams.size() > 0) {
SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(targetNamespace, loadPart);
soapHeaderElement.setNamespaceURI(targetNamespace)