Java Axis Service 手动调用WebService 入参为NULL
博客专区 > JokerSir 的博客 > 博客详情
Java Axis Service 手动调用WebService 入参为NULL
JokerSir 发表于1年前
Java Axis Service 手动调用WebService 入参为NULL
  • 发表于 1年前
  • 阅读 57
  • 收藏 0
  • 点赞 0
  • 评论 0

####环境前提:

  • axis 版本为 1.7
  • ws 采用 jws 发布

ws发布源码

import javax.xml.ws.Endpoint;
/**
 * 服务发布主线程
 */
public class MainPublisher {

	public static void main(String[] args) {
		Endpoint.publish("http://192.168.2.31:9022/services/auth",new HiveWevServer());  
		System.out.println("启动成功");
	}
}

ws服务

import javax.jws.WebService;
/**
 * Webservice Hive查询服务
 * @author linx
 */
@WebService
public class HiveWevServer {
	public String getAuthInfo(String input){
		System.out.println("====== 入参:"+input);
		return "";
	}
}

axis 调用代码

import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
/**
 * WebService 接口调用
 * @author linx
 */
@org.springframework.stereotype.Service
public class WsHandlerService {
	/**
	 * 调用WebService 
	 */
	public String authPersionalInfo(String qid,String mobile,String name, String idCard){
		String result = "";
		try{			
			Service service = new Service(); 
			Call call = (Call) service.createCall(); 
			call.setTargetEndpointAddress("http://192.168.2.31:9022/services/auth?wsdl"); 
			call.setOperationName(new QName("http://oper.hive.com/", "getAuthInfo"));//
			call.addParameter("in0", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
			call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//
			result = (String)call.invoke(new Object[]{mobile}); 
		}catch(Exception e){
			e.printStackTrace();
			System.out.println("========Error==========");
		}
		return result;
	}
}

问题

由以上发布的WebService服务,通过axis以上方式调用,ws服务中getAuthInfo的方法始终收到入参为null

解决方法

以下是CSDN查到得有效方案,原贴:CSDN

结合SoapUI分析发现,如果jws通过annotation来发布,或者类似方式,通过axis调用,需要注意两点: 1)在call.setOperationName是必须通过Qname来制定namespaceURI 2)在设定参数时,不使用服务端定义的参数名,而是arg0~argN来定义,也不需制定namespaceURI,上述代码 call.addParameter(new QName(namespace, "TransNo"), XMLType.XSD_STRING, ParameterMode.IN); 修改为 call.addParameter("arg0", XMLType.XSD_STRING, ParameterMode.IN); 有几个参数,即设定几个。 提供参考,可测试试验一下。

标签: java axis webservice jws
共有 人打赏支持
粉丝 0
博文 9
码字总数 2565
×
JokerSir
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: