使用java调用webservice

	一、Web Services以XML作为数据交换的标准格式,它是跨平台的应用,允许以任何方式创建Web Services,在.NET、Java平台上访问。
	在Java平台创建和访问Web Service多通过Axis完成。Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。Axis目前版本是为Java编写的。在使用Axis访问Web Service时,需要引入以下包(10个):axis-ant.jar、axis.jar、commons-discovery-0.2.jar、commons-logging-1.0.4.jar、jaxrpc.jar、log4j-1.2.8.jar、saaj.jar、wsdl4j-1.5.1.jar、activation-1.1.jar和mail-1.4.jar。
	(1)访问Java创建的Web Service
	在当前Java客户端应用中添加相应的10个Axis包,编写客户端程序:
	/**
     * @param url  接口地址
     * @param xml //报文
     * @return 返回的报文
     */
    public static String getWSDLCall(String url, String xml){
        String result = "";
        try {
            Service service = new Service();
            Call call = (Call) service.createCall();
            call.setTargetEndpointAddress(url);
            call.setOperationName(new QName("http://tempuri.org/", "HelloWorld"));
            //需要传入参数的时候使用
            //call.addParameter("xml", org.apache.axis.encoding.XMLType.XSD_DATE,
           	 //javax.xml.rpc.ParameterMode.IN);//接口的参数
            //call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型 
            result = (String)call.invoke(new Object[]{xml});
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return result;
    }
 
	二、java调用.net开发的webservice的时候,如果大家遇到以下问题,可以参考下解决办法:
	1、 出现的问题大多是因为没有引入响应的jar包,如果使用Axis的话,将以上10个包引入后应该没有什么问题
	2、java调用时总提示:faultString: 服务器未能识别 HTTP 标头 SOAPAction 的值:

上网找了解决方法,最好修改的结果如下:

.net WebService代码:

webservicenamespace后面增加:

[SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)]

--------------------——————————————————

3、无法识别请求元素 <GetTestQuestions xmlns=''>

  解决办法:

将 call.setOperationName(new QName("", "GetTestQuestions"));

改为call.setOperationName(new QName("自己的命名空间", "GetTestQuestions"));

--------------------——————————————————

4、在传递基本数据的时候,服务端接收的参数为null

解决办法:

 //需要传入参数的时候使用,name是webservice方法的参数名,XSD_STRING是参数类型,一定要严格对应             call.addParameter(new QName(XmlNamespace,"name"),                      org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);

而下面这种传参数的写法,服务端获取的是null

call.addParameter("name", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);

希望能够帮到大家O(∩_∩)O

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值