首页 新闻 赞助 找找看

java方法调用.net的webservice接口的异常求助

0
悬赏园豆:20 [已解决问题] 解决于 2019-06-02 11:42

需求:用java方法调用客户的.net的webservice接口方法。
问题:
网上找了一个java调用.net的ws服务接口的方法,然后调用网上的天气预报web服务,但是输入参数报错----服务器无法处理请求。 —> 值不能为空。

实际就只有一个参数啊!还不叫input!而且我传了!!
代码如下:
==================================================

package com.jay.demo.webservice.dynamic;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.ws.commons.schema.constants.Constants;
import javax.xml.namespace.QName;
/**

  • @Author 99
  • @Date 2019/5/22 13:44
  • @Description 动态调用.net版本的webservice接口客户端
    **/
    public class WSNetServerDynamicClient {
    public static void main(String[] args) {
    Textaxis();
    }
    //通过axis方式调用webservice接口
    public static void Textaxis() {
    try {
    // 指出service所在完整的URL
    String endpoint = "http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl";
    //调用接口的targetNamespace
    //targetNamespace 就是你用浏览器打开endpoint 路径加上?wsdl,即http://xxx/WebService1.asmx?wsdl 中的targetNamespace属性值
    String targetNamespace = "http://WebXml.com.cn/";
    //所调用接口的方法method
    String method = "getSupportCityString";
    // 创建一个服务(service)调用(call)
    Service service = new Service();
    Call call = (Call) service.createCall();// 通过service创建call对象
    // 设置service所在URL
    call.setTargetEndpointAddress(new java.net.URL(endpoint));
    call.setOperationName(new QName(targetNamespace, method));
    call.setUseSOAPAction(true);
    call.setSOAPActionURI("http://WebXml.com.cn/getSupportCityString");
    //变量最好只是用String类型,其他类型会报错
    call.addParameter(new QName(targetNamespace, "getSupportCityString"),
    Constants.XSD_STRING,
    javax.xml.rpc.ParameterMode.IN);//设置参数名 state  第二个参数表示String类型,第三个参数表示入参  
    call.setReturnType(Constants.XSD_STRING);// 设置返回类型
    String jsonString = (String) call.invoke("getSupportCityString",new Object[]{"苏州"});//此处为数组,有几个变量传几个变量
    System.out.println(jsonString);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }

==================================================
附上调用网上的天气预报web服务wsdl地址:
http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
急求大家帮助啊!!!!!!!!

金鱼的第七秒记忆的主页 金鱼的第七秒记忆 | 初学一级 | 园豆:178
提问于:2019-05-22 16:13
< >
分享
最佳答案
0

之前理解错了,我的业务需求,只要通过发送post请求到webservice就行了

金鱼的第七秒记忆 | 初学一级 |园豆:178 | 2019-06-02 11:41
其他回答(1)
0

这个问题我年轻时遇到过,好像是和.net的可空值类型有关,哦,想起了了。你看看自动生成的代理类,是不是有个HasValue的属性,如果是可空值类型,而你想传递null,则把这个hasvalue设置为false,否则设置为true。

收获园豆:20
会长 | 园豆:12401 (专家六级) | 2019-05-22 19:39

你好,代理类里没有找到hasValue的属性。是不是需要修改webservice服务的属性?对接的webservice服务都是客户的,没法去修改webservice属性

支持(0) 反对(0) 金鱼的第七秒记忆 | 园豆:178 (初学一级) | 2019-05-23 09:35

@金鱼的第七秒记忆: 那可能和我遇到的情况不一样,不过我在百度上搜索你说的情况能搜索到很多,问主是否试过网友说的一些解决方案

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2019-05-23 10:13

@会长: 是我理解错了,我的业务需求,只要通过发送post请求到webservice就行了。不用用这种框架方式了

支持(0) 反对(0) 金鱼的第七秒记忆 | 园豆:178 (初学一级) | 2019-06-02 11:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册