0 0

Axis2 做webservice client 端时遇到的一个问题10

大家好:

最近一直在做webservice 相关的东西。 webservice 的特性要是跨平台,跨语言。 我自己分别用 Java 和 Python 搭建了两套webservice(从某种意义上来讲,不仅是兴趣爱好,也是企业需求). 其中Java中使用Axis2框架,server 端和client端可以正常交互。 Python 中,server 端使用的是 tornadows(tornadow webservice), 客户端使用的是 suds, server 端和client端也可以正常交互。

既然webservice 是跨平台的,我用python client 端来访问 Axis2 serve端,最早有一些 encoding 的问题,最后也解决了。
现在我用 Axis2 client 访问我的 python server 端,一直不成功。 Axis2 client 收到的结果为null, python server端没有收到Axis2 client 的请求。 同样的python server, 我用python client(suds) 是可以的。

现在我把我的 python server 端的code, 在浏览器中访问得到的wsdl 文件,以及 Axis2 client的code 一起贴上来。 希望高手轻移尊步,帮我指点迷津。

part1: python server
#NOTE: 功能很简单,就是提供一个getPrice() 方法,接受一个整数,返回一个整数

import logging

import tornado.httpserver
import tornado.ioloop
import tornado.web
from tornadows import soaphandler
from tornadows import webservices
from tornadows import xmltypes
from tornadows.soaphandler import webservice
from tornado.options import define, options

define('mode', default='deploy')
define('port', type=int, default=8001)
options['logging'].set('warning')


class SMSService(soaphandler.SoapHandler):

    @webservice(_params=xmltypes.Integer,_returns=xmltypes.Integer)
    def getPrice(self,a):
        print 'come here'
        return 1987


if __name__ == '__main__':
    service = [('SMSService',SMSService)]
    app = webservices.WebService(service)
    ws  = tornado.httpserver.HTTPServer(app)

    ws.listen(options.port)
    logging.warn("SMSService running on: localhost:%d", options.port)
    tornado.ioloop.IOLoop.instance().start()

part 2: wsdl
#NOTE: 在浏览器中输入 ”http://172.16.2.46:8001/SMSService?wsdl“ 得到wsdl 文件如下:

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://127.0.1.1:8001/SMSService/getPrice" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="SMSService" targetNamespace="http://127.0.1.1:8001/SMSService/getPrice">
<wsdl:types>
<xsd:schema targetNamespace="http://127.0.1.1:8001/SMSService/getPrice">
<xsd:complexType name="paramsTypes">
<xsd:sequence>
<xsd:element name="a" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="params" type="tns:paramsTypes"/>
<xsd:element name="returns" type="xsd:integer"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="SMSServiceRequest">
<wsdl:part element="tns:params" name="parameters"/>
</wsdl:message>
<wsdl:message name="SMSServiceResponse">
<wsdl:part element="tns:returns" name="parameters"/>
</wsdl:message>
<wsdl:portType name="SMSServicePortType">
<wsdl:operation name="getPrice">
<wsdl:input message="tns:SMSServiceRequest"/>
<wsdl:output message="tns:SMSServiceResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="SMSServiceBinding" type="tns:SMSServicePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getPrice">
<soap:operation soapAction="http://127.0.1.1:8001/SMSService" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SMSService">
<wsdl:port binding="tns:SMSServiceBinding" name="SMSServicePort">
<soap:address location="http://127.0.1.1:8001/SMSService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

part 3: Axis2 client

package client;

import javax.xml.namespace.QName;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public class client_for_python {

public static void main(String[] args) throws Exception {

// step 1: 使用RPC方式调用WebService
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// step 2: 指定调用WebService的URL
// url for python
String url2 = "http://172.16.2.46:8001/SMSService";
EndpointReference targetEPR = new EndpointReference(url2);
options.setTo(targetEPR);
// step 3: 指定getGreeting方法的参数值
// step 5-6: (similiar whit
// it!)下面是调用getPrice方法的代码,这些代码与调用getGreeting方法的代码类似
Class[] classes = new Class[] { int.class };
QName opAddEntry = new QName(
"http://172.16.2.46:8001/SMSService/getPrice");
System.out.println(serviceClient.invokeBlocking(opAddEntry,
new Object[] {1}, classes)[0]);
}
}

#NOTE: 没有任何输出:
控制台上的所有输出就是:
log4j:WARN No appenders could be found for logger (org.apache.axis2.context.AbstractContext).
log4j:WARN Please initialize the log4j system properly.
null

在python server 端也没有收到任何参数。

我个人分析,可能是 Axis2 端 url 的指向有问题,可以看了一部分API, 也做了一些尝试,还是不行。
Hope someone can give me some points.Thanks!
(The blog permit not to use GaoShao BanMang,hehe!)

-- Jia Xiaolei





SOA 
2011年12月08日 17:38

2个答案 按时间排序 按投票排序

0 0

采纳的答案

我不知道你代码怎么做的,但是我可以告诉你怎么去解决这个问题,
最简单有效的方法就是抓包,
1.先确认请求能到服务端。
2.从服务端抓两种不同客户端的访问过来的SOAP包。
把两个抓到的包做对比,看看有什么不一样。排查代码问题还是网络问题,还是什么名空间的问题。

祝你好运!

2011年12月09日 14:10
0 0

抓包用这个 tcpmon,我比较喜欢的。

2011年12月09日 14:11

相关推荐

    Axis2 webservice Client plugin

    标题中的“Axis2 WebService Client plugin”指的是一个用于MyEclipse集成开发环境的插件,其主要功能是帮助开发者创建和使用Axis2 Web服务客户端。Axis2是Apache软件基金会的一个开放源码项目,是一个高性能、灵活...

    axis2实现webservice

    - **定义**:Apache Axis2是基于Java的一个开源的WebService框架,它支持多种标准(包括SOAP1.1、SOAP1.2、WS-Addressing等),并且具有轻量级、模块化的特点。Axis2提供了强大的工具集来简化WebService的开发过程。...

    axis2调用webservice接口jar包

    总之,Axis2提供了一个强大且灵活的框架来调用WebService接口。通过理解其工作原理和调用步骤,开发者可以轻松地将远程服务集成到自己的应用中。在实际项目中,务必根据具体需求选择合适的版本和配置,确保代码的...

    axis2开发webservice(二)

    axisClient Maven Webapp是一个maven web工程,在这个工程里面,介绍了2种axis2访问服务端接口的方式。第三种方式是利用axis2插件,将wsdl文件自动生成客户端代码,此种方式在myeclipse安装axis2.txt文件中已经做了...

    基于axis2实现的webservice简单实现(客户端+服务端)。

    Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了高效且灵活的Web服务解决方案。 **Web服务**是一种在互联网上不同系统间交换数据的方式,它允许应用程序之间通过标准协议进行通信。Web服务通常使用...

    Java Webservice Axis2 Client(含soapheader验证)

    总之,Java Webservice Axis2 Client的开发涉及到生成客户端代码、设置SOAP Header、调用服务和处理响应等多个步骤。了解这些概念和API对于构建安全、可靠的Web服务客户端至关重要。在实际项目中,确保遵循最佳实践...

    axis2 webservice client端jar包.rar

    axis2-adb-1.5.6.jar axis2-kernel-1.5.6.jar axis2-transport-http-1.6.4.jar axis2-transport-local-1.6.4.jar commons-codec-1.12.jar commons-httpclient-3.1.jar commons-logging-1.2.jar httpcore-4.3.3.jar ...

    client_axis.rar_AxisClient_axis client_axis.client_webservice客户端

    当我们谈论“AxisClient”时,这是Apache Axis的一个组件,它是一个开源的Java框架,专门用于创建和部署Web服务。Apache Axis提供了丰富的功能,使得开发人员能够轻松地实现基于SOAP(简单对象访问协议)的Web服务...

    axis2的webService服务器端和客户端开发项目

    Axis2是Apache软件基金会开发的一个高效且灵活的Web服务框架,它主要用于构建和部署Web服务。本项目将详细介绍如何使用Axis2进行Web服务的服务器端和客户端开发。 1. **Axis2简介** Axis2是基于SOAP(简单对象访问...

    Axis2WebService与Spring的整合

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方式,而Axis2是Apache软件基金会开发的一个流行的Java Web服务框架。Spring框架则是Java企业级应用的事实标准,提供了强大的依赖注入、AOP(面向切面编程)等...

    Axis2生成webservice客户端通用依赖包

    总的来说,"Axis2生成webservice客户端通用依赖包"是一个方便开发者快速搭建和使用Web服务客户端的解决方案,它集成了必要的库,简化了项目集成过程,提高了开发效率。在实际开发中,理解和掌握这一方法将极大地提升...

    axis2方式开发webservice

    axisClient Maven Webapp是一个maven web工程,在这个工程里面,介绍了2种axis2访问服务端接口的方式。第三种方式是利用axis2插件,将wsdl文件自动生成客户端代码,此种方式在myeclipse安装axis2.txt文件中已经做了...

    axis2 webservice 客服端

    标题 "axis2 webservice 客服端" 涉及的核心技术是Apache Axis2,它是一个流行的开源Web服务框架,用于构建和部署Web服务。在Java环境中,Axis2提供了高效且灵活的服务实现和消费机制。这里我们将深入探讨Axis2...

    利用Axis2实现WebService开发与部署

    Apache Axis2是Java环境中一个功能强大的Web Service引擎,它提供了一种高效且灵活的方式来创建和使用Web Services。以下是关于利用Axis2进行WebService开发与部署的详细步骤和三种主要方法: 1. 引言 Axis2作为...

    axis2开发webservice(三)

    axisClient Maven Webapp是一个maven web工程,在这个工程里面,介绍了2种axis2访问服务端接口的方式。第三种方式是利用axis2插件,将wsdl文件自动生成客户端代码,此种方式在myeclipse安装axis2.txt文件中已经做了...

    axis2调用WebService详细说明

    接下来,我们通过一个具体的客户端示例来演示如何使用Axis2进行WebService的调用。 ##### 1. 生成客户端代码 - 使用`wsdl2java.bat`脚本自动生成客户端代码。该脚本位于`axis2-1.4\bin`目录下,命令格式如下: ``...

    webserviceClient-axis2.rar

    在这个“webserviceClient-axis2.rar”压缩包中,我们有一个Java客户端调用Web服务接口的完整示例,这将帮助开发者理解如何在 Axis2 框架下实现这一功能。 首先,我们需要了解Axis2的基本概念。Axis2 是 Axis1 的下...

    axis2 webservice开发总结文档

    本文档通过一个简单的 HelloWorld 示例来展示如何搭建基于 Axis2 的 WebService。 #### 二、环境搭建 1. **下载 Axis2 SDK** 首先,需要下载 Axis2 的 SDK,并从中提取 lib 文件夹中的库文件。这些库文件是 Axis...

    基于Axis2的WebService的实例demo(包含jar包)

    本实例将深入讲解如何使用Axis2来创建一个简单的WebService,并将其整合到Web项目中。 1. **Axis2介绍** Axis2是Axis1的升级版,它基于Apache SOAP项目,并提供了更多的特性,如更好的模块化结构、支持WS-*标准...

Global site tag (gtag.js) - Google Analytics