代码:
private boolean connect(String namespace, String endpoint, String function) {
try {
// 连接WS服务器
call = (Call) service.createCall();
// 设置调用方法
call.setOperationName(new QName(namespace, function));
// 设置服务器地址
call.setTargetEndpointAddress(endpoint);
} catch (ServiceException ex) {
LOG.error("连接服务器(" + endpoint + ")失败", ex);
return false;
}
return true;
}
public boolean dmisQuery(String endpoint, String namespace, String function, String start,
String until,String GID) {
//LOG.info("测试调用:" + endpoint + ", 接口方法:" + function + ", " + "发送者:" + sender);
// 连接服务端
if (!connect(namespace, endpoint, function))
return false;
boolean result = false;
try {
Object data = call.invoke(new Object[] {GID,start,until});
// 解析数据
String source = new String(Base64.decode((String) data));
LOG.info("查询结果:" + (String) data);
//Response response = unmarshal(source);
//LOG.info("数据状态:" + response.getStatus());
// } catch (JAXBException ex) {
// LOG.error("格式化XML失败", ex);
} catch (RemoteException ex) {
LOG.error("查询(" + endpoint + ")失败", ex);
}
return result;
}
public static void main(String[] args){
impl.dmisQuery("http://10.50.11.190/MWWebSite/ProjectHome/WebService/WebSer_TY_GJ.asmx", "http://tempuri.org/", "GetData", "2012-08-01 00:00:00", "2012-08-01 00:00:00","");
}
注意上面的地址http://10.50.11.190/MWWebSite/ProjectHome/WebService/WebSer_TY_GJ.asmx后缀是"asmx",表明这个地址代表的服务端是.NET架构的。
报错:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Client
faultSubcode:
faultString: System.Web.Services.Protocols.SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值: 。
在 System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest()
在 System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)
在 System.Web.Services.Protocols.SoapServerProtocol.Initialize()
在 System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
解决办法:
修改connect方法,针对.NET的webservice服务端,axis客户端调用时加上
call.setSOAPActionURI(namespace+function);
修改后如下:
private boolean connect(String namespace, String endpoint, String function) {
try {
// 连接WS服务器
call = (Call) service.createCall();
// 设置调用方法
call.setOperationName(new QName(namespace, function));
// 设置服务器地址
call.setTargetEndpointAddress(endpoint);
/******************针对.NET服务端webservice这些个代码都是必须的*******************/
call.addParameter(new QName("http://tempuri.org/","GID"),
org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter(new QName("http://tempuri.org/","start"),org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter(new QName("http://tempuri.org/","until"),org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING);
call.setUseSOAPAction(true);
call.setSOAPActionURI("http://tempuri.org/GetData");
/******************针对.NET服务端webservice这些个代码都是必须的*******************/
} catch (ServiceException ex) {
LOG.error("连接服务器(" + endpoint + ")失败", ex);
return false;
}
return true;
}
分享到:
相关推荐
axis2客户端调用axis1服务接口 调用方式 使用RPC方式调用WebService,为了防止冲突可以增加 // 与weblogic的lib冲突配置 System.setProperty("javax.xml.stream.XMLInputFactory", ...
总之,使用CXF客户端调用Axis服务端涉及多个步骤,包括生成客户端代码、配置客户端、创建服务代理以及进行实际调用。理解这些步骤并正确实现它们是成功通信的关键。在实际开发过程中,可能会遇到各种问题,需要耐心...
当涉及到“axis2客户端调用服务端,带用户身份认证”时,我们主要关注的是如何在 Axis2 客户端中添加安全机制,确保只有经过验证的用户能够访问服务。 首先,理解身份认证是网络安全的基础。在Web服务中,通常采用...
本文将深入探讨如何使用Axis客户端进行调用,以及如何利用WSDL2JAVA工具生成客户端代码。 标题中的"Axis客户端调用代码"指的是使用Axis库来实现对Web服务的调用。Axis提供了Java客户端API,使得开发人员能够通过...
java axis客户端调用webservice,可应用于ofbiz框架。 解决网络上共享代码两次调用后会出现timeout的BUG
在本场景中,我们关注的是Axis客户端如何调用需要身份验证的CXF服务。Axis是一个开放源码的SOAP栈,常用于创建和部署Web服务,而CXF则是一个更现代的Java框架,也用于构建和消费Web服务,支持WS-Security等高级特性...
以前看别人写的,似乎都比较复杂,而且没有提供一个webservice供初学者测试,我找了一个http://www.webservicex.net/globalweather.asmx,根据这个写了一个例子,让新学的少走一些弯路吧
本文将深入探讨如何使用Axis2客户端调用WebService接口,并且会特别关注如何精简所需的jar包。 首先,了解Axis2客户端的基本概念是至关重要的。Axis2客户端是用于与远程Web服务交互的工具,它允许开发者通过SOAP...
Axis是Apache软件基金会开发的一个开放源代码SOAP客户端和服务端的实现,它允许Java开发者轻松地创建和部署Web服务。通过Axis,Java应用程序可以调用远程的Web服务,就像调用本地方法一样简单。 在本例中,我们面临...
标题中的“客户端通过axis调用服务端发布的服务类”指的是在分布式系统开发中,客户端应用程序如何利用Apache Axis框架来调用服务端提供的Web服务。Apache Axis是一个开源工具,主要用于实现SOAP(Simple Object ...
用AXIS2作为客户端调用webService的demo:本人亲测可用,eclipse工程java项目包含完整代码和完整jar包, 只要用eclipse导入项目即可,运行控制台显示success或者false字符串,说明OK。
之前webservice客户端调用,使用RPC客戶端接口调用方法,但发现此种调用方式针对携参方式并不适用。最后经过多种方式测试选择了OMFactory......调用。经测试好用
java采用axis调用.net写的WebService,WebService的参数有传人和传出,传出的参数为ref,java端ParameterMode.OUT,传人的为ParameterMode.IN,WebService返回值为String,java利用Map取传出参数,对Map进行遍历取得...
### Axis2生成客户端与服务端代码详解 #### 一、Axis2简介 Axis2是Apache组织下的一个开源项目,它是一种高性能、轻量级的Web服务框架,支持SOAP和REST等协议,能够帮助开发者轻松地构建和部署Web服务。Axis2提供了...
【标题】基于Axis的Web Service客户端调用 在IT领域,Web Service是一种通过网络进行通信的标准协议,它允许不同系统间的应用程序互相交换数据。而Apache Axis是Java平台上的一个开源工具,专门用于创建和部署Web ...
Java调用.NET ASMX Web服务的核心在于生成对应的客户端代理类。这个过程可以通过Apache CXF、 Axis2等开源工具完成,或者手动构造SOAP请求。以下是使用Apache CXF生成代理类的步骤: 1. 添加CXF依赖:在Java项目的...
总的来说,这个压缩包提供了一个完整的基于Axis2的Web服务实现示例,包括服务端创建服务和客户端调用服务的所有必要组件。通过学习和理解这些文件,开发者可以更好地掌握如何在实际项目中利用Apache Axis2构建和使用...
在本文中,我们将深入探讨如何使用AXIS2客户端进行服务调用,包括AXIS2的基本概念、配置、服务引用以及调用流程。 **AXIS2简介** AXIS2是Apache软件基金会开发的一个强大的Web服务引擎,它支持多种协议,如SOAP 1.1...
Java程序调用.NET/C#的Web服务是一种跨平台的交互方式,主要依赖于SOAP(Simple Object Access Protocol)协议,使得不同编程语言开发的应用程序能够相互通信。在本场景中,用户已经提供了一个.NET的Web服务,而我们...