解决java用axis调用.NET写的webService中遇到的各种Exception
来源:互联网 发布:mysql取最近一条记录 编辑:程序博客网 时间:2024/05/20 03:07
当我使用网上最简单的axis连接webService时(代码如下):
import javax.xml.rpc.ParameterMode;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import org.apache.axis.encoding.XMLType;......private static String WSURL = "http://xxx/SendWebService.asmx"private static void invoke(String method, String[] params, Object[] values) { try { //创建一个服务 Service service = new Service(); //建立服务调用实例Call call = (Call) service.createCall(); //设定调用路径 call.setTargetEndpointAddress(new URL(WSURL)); //设定调用方法 call.setOperation(method); call.setReturnType(XMLType.XSD_STRING); for (String param:params) { call.addParameter(param, XMLType.XSD_STRING, ParameterMode.IN); } String result = (String) call.invoke(values); } catch (Exception e) {e.printStackTrace();result = null;}}
抛出异常 服务器未能识别 HTTP 头 SOAPAction 的值: 。
后来得知需要加上
call.setUseSOAPAction(true);call.setSOAPActionURI(NAMESPACE + method);
这两句代码 其中NANESPACE 就是你用浏览器打开WSURl路径加上?wsdl,即http://xxx/SendWebService.asmx?wsdl 中的targetNamespace属性值org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.我又找了很多资料,最后才得知是返回类型和自己接受的没有匹配。
所以call.setReturnType(XMLType.XSD_SCHEMA);//也可能是别的类型
最后为了严谨,用上了QName
最后代码如下:
import java.net.URL;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import org.apache.axis.encoding.XMLType;import org.apache.axis.message.MessageElement;import org.apache.axis.types.Schema;private static String WSURL = "http://xxx/SendWebService.asmx";private static String NAMESPACE = "http://xxx/WebSms1037test/";/** * 执行一次 ws * @param method 接口名 * @param params 传入的参数名 * @param values 传入的参数值 * @return Map */ private static Map invoke(String method, String[] params, Object[] values) { Map result = null; Schema schema = null; try { //创建一个服务 Service service = new Service(); //建立服务调用实例Call call = (Call) service.createCall(); //设定调用路径 call.setTargetEndpointAddress(new URL(WSURL)); call.setUseSOAPAction(true); //设定调用方法 call.setOperationName(new QName(NAMESPACE, method)); call.setSOAPActionURI(NAMESPACE + method); call.setReturnType(XMLType.XSD_SCHEMA); for (String param:params) { call.addParameter(new QName(NAMESPACE, param), XMLType.XSD_STRING, ParameterMode.IN); } schema = (Schema) call.invoke(values); MessageElement[] msgele = schema.get_any(); List<MessageElement> msgElmtHead = msgele[0].getChildren();// 消息头,DataSet对象 result = new HashMap<>(); for (MessageElement element : msgElmtHead) { result.put(element.getName(), element.getValue()); } } catch (Exception e) { e.printStackTrace(); result = null; } return result; }
0 0
- 解决java用axis调用.NET写的webService中遇到的各种Exception
- java调用.net生成的WebService(axis调用)
- JAVA中使用axis调用.net WebService
- JAVA使用axis调用.net WSDL的WebService
- 调用Axis WebService服务端错误的解决
- axis,axis2调用.net的webservice
- axis,axis2调用.net的webservice
- JAVA+AXIS客户端调用Asp.net Web Service过程中遇到的问题及解决方法
- java(axis)调用java编写的webservice
- Java调用.Net写的Webservice
- NET调用Java写的WebService[转]
- asp.net调用java写的webservice
- .net写的WebService被Java调用
- .NET调用Java写的WebService[原]
- WEbService服务端-用Axis客户端测试遇到的问题Exception in thread "main" AxisFault
- java使用AXIS调用.net的webservice的小说明(webservice方法里含有对象)
- cxf调用.net webservice 接口遇到的问题(尚未解决)
- 解决调用.net写的webservice 参数变为 null
- 性能测试关注的mysql变量
- 四层和七层负载均衡的区别
- AndroidStudio 集成litepal 报错
- 编程基本功训练:流程图画法及练习
- 如何彻底关闭windows自适应亮度功能
- 解决java用axis调用.NET写的webService中遇到的各种Exception
- JavaScript特点、优缺点及常用框架
- 算法导论--动态规划算法--求最长回文序列
- 音频文件ID3解析
- MySQL在大型网站的应用架构演变
- 程序员的自我修养 读书笔记 chp2
- Fresco与Shared Element Transition不兼容
- 日志分析方法概述
- IntelliJ IDEA实践,快捷键和设置