很纠结的问题:org.apache.axis2.AxisFault: 服务器未能识别 HTTP 头 SOAPAction 的值

很纠结的问题:org.apache.axis2.AxisFault: 服务器未能识别 HTTP 头 SOAPAction 的值

 

纠结了半天,网上找了很多办法。。。

 

 

试来试去都不行。。。用了soapui里取到的报文来用不行。。。。
老是报错:::org.apache.axis2.AxisFault: 服务器未能识别 HTTP 头 SOAPAction 的值

怀疑是代码写错的原因。。。决定不用框架里的代码。。。

单独写。。。

在网上找了几段来试一下。

 


终于发现有一段可以了:

 

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import java.net.URL;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;

 

String myCall(String operationCode, HashMap param){
  String theRegionCode = "31124";  
  try{
             String endpoint = "http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx";  
  
            Service service = new Service();  
    
         Call call = (Call) service.createCall();  
           call.setTargetEndpointAddress(new java.net.URL(endpoint));  
  
           call.setOperationName(new QName("http://WebXml.com.cn/",  
                    "getStockInfoByCode"));   
              
       call.addParameter(new QName

(");  
               
         //call.setReturnType(org.apache.axis.encoding.XMLType.XSD_SCHEMA);  
               
            call.setUseSOAPAction(true);  
             call.setReturnClass(String[].class);  
             call.setSOAPActionURI("http://WebXml.com.cn/getStockInfoByCode");  
 
        String[] result =  (String[])call.invoke(new Object[]{"sh600477"});  
        System.out.print("");
  }catch(Exception w){}
    return "";


 }

 

http://blog.csdn.net/aixiaorenzhe123/article/details/4292465

=====================

和原先老是报错的对比一下:


String theIpAddress = (String)param.get("ip");
    try {
     //调用webservice的地址
      String endPoint = "http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl";
      Service service = new Service();
      Call call = (Call) service.createCall();
      call.setTargetEndpointAddress(new URL(endPoint));
   
      //调用webservice方法,必须这样调用该方法,是根据soap协议里的方法声明
      call.setOperationName(new QName("http://webxml.com.cn/getCountryCityByIp")); 
    
      //webservice里method的参数,必须这样定义,否则必然出错   
      call.addParameter(new QName("http://WebXml.com.cn/", "theIpAddress"),XMLType.XSD_STRING, ParameterMode.IN);
     
      call.setReturnType(XMLType.XSD_STRING);
      call.setUseSOAPAction(true);
      call.setSOAPActionURI("http://WebXml.com.cn/getCountryCityByIp");
      String result = (String) call.invoke(new Object[] { theIpAddress});
 //     String[] infos = result.split(":", 2);
 //     if (infos.length == 2) {
 //      mobileInfos = infos[1].split(" ", 3);
 //     }
    } catch (Exception e) {
     e.printStackTrace();
    }
    return "";

 

 

 

==============


尝试着参照正确的修改一下后居然行了,哈哈哈哈:

 String myCall(String operationCode, HashMap param){
   String theIpAddress = (String)param.get("ip");
    try {
     //调用webservice的地址
      String endPoint = "http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx";  
    
      Service service = new Service();
      Call call = (Call) service.createCall();
      call.setTargetEndpointAddress(new URL(endPoint));
              
      //调用webservice方法,必须这样调用该方法,是根据soap协议里的方法声明
        call.setOperationName(new QName(""));   
    
      //webservice里method的参数,必须这样定义,否则必然出错   
        call.addParameter(new QName(");
       
           call.setUseSOAPAction(true);  
            call.setReturnClass(String[].class);  
            call.setSOAPActionURI("http://WebXml.com.cn/getCountryCityByIp");  
            
      String[] results =  (String[])call.invoke(new Object[]{theIpAddress});  
        
      System.out.print("");
         
    } catch (Exception e) {
     e.printStackTrace();
    }
    return "";
 }
 

 

 

 

 ============太有才了==========

 


 

这个错误信息是在使用Apache Axis(一个Java库,用于创建Web服务和客户端)时遇到的问题。错误的具体含义是:由于一个`org.apache.axis.AxisFault`异常,系统试图将一个字符串类型的强制转换为`java.lang.Long`类型,但这是不允许的,因为`String`并不是`Long`类型的子类或可以自动转换的类型。 - `org.apache.axis.AxisFault`:表示在Axis框架中发生了错误,可能是由于网络问题、请求处理错误或者是与服务端接口不匹配导致的。 - `java.lang.ClassCastException`:这是一个运行时异常,它发生在试图将一个对象从一个类转换到另一个类,但它们实际上是不兼容的类型时。 - `java.lang.String cannot be cast to java.lang.Long`:这句话直译就是“无法将字符串转换为长整型”。 可能的原因包括: 1. 在服务端,预期接收的是long类型的参数,但在发送请求时误传了字符串。 2. 代码中有一个地方尝试将从API返回的响应解析为long,但实际响应可能是字符串而非数字。 3. 可能的数据绑定或序列化问题,如XML或JSON转换时出错。 要解决这个问题,你需要检查出错代码行,确认是否正确地处理了数据类型,并确保在发送和接收数据时类型匹配。如果是在调用远程服务,检查一下服务的文档,看看预期的参数格式。如果是代码错误,修复转换的地方,可能需要使用`Long.parseLong()`或`Long.valueOf()`函数来正确转换字符串。如果你不确定,还可以考虑添加适当的异常处理代码来捕获并处理这个错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值