`

wsdl axis2 spring

    博客分类:
  • J2EE
阅读更多

 

WSDL 文档是利用这些主要的元素来描述某个 web service 的:

元素 定义
<portType> web service 执行的操作
<message> web service 使用的消息
<types> web service 使用的数据类型
<binding> web service 使用的通信协议

 

 

下面是一个标准的wsdl定义

来自  http://www.webxml.com.cn/webservices/weatherwebservice.asmx?wsdl

 

 

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://WebXml.com.cn/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://WebXml.com.cn/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">&lt;a href="http://www.webxml.com.cn/" target="_blank"&gt;WebXml.com.cn&lt;/a&gt; &lt;strong&gt;天气预报 Web 服务,&lt;/strong&gt;数据来源于&lt;strong&gt;中国气象局&lt;/strong&gt; &lt;a href="http://www.cma.gov.cn/" target="_blank"&gt;http://www.cma.gov.cn/&lt;/a&gt; ,数据每2.5小时左右自动更新一次,准确可靠。包括 340 多个中国主要城市和 60 多个国外主要城市三日内的天气预报数据。&lt;/br&gt;此天气预报Web Services请不要用于任何商业目的,若有需要请&lt;a href="http://www.webxml.com.cn/zh_cn/contact_us.aspx" target="_blank"&gt;联系我们&lt;/a&gt;,欢迎技术交流。 QQ:8409035&lt;br /&gt;&lt;strong&gt;使用本站 WEB 服务请注明或链接本站:http://www.webxml.com.cn/ 感谢大家的支持&lt;/strong&gt;!&lt;br /&gt;&lt;span style="color:#999999;"&gt;通知:天气预报 WEB 服务如原来使用地址 http://www.onhap.com/WebServices/WeatherWebService.asmx 的,请改成现在使用的服务地址 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx ,重新引用即可。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;</wsdl:documentation>

  <wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://WebXml.com.cn/">
      <s:complexType name="ArrayOfString">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="s:string" />
        </s:sequence>
      </s:complexType>
      <s:element name="getSupportDataSet">
        <s:complexType />
      </s:element>
      <s:element name="getSupportDataSetResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="getSupportDataSetResult">
              <s:complexType>
                <s:sequence>
                  <s:element ref="s:schema" />
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="ArrayOfString" nillable="true" type="tns:ArrayOfString" />
      <s:element name="DataSet" nillable="true">
        <s:complexType>
          <s:sequence>
            <s:element ref="s:schema" />
            <s:any />
          </s:sequence>
        </s:complexType>
      </s:element>
    </s:schema>
  </wsdl:types>

 
 <wsdl:message name="getSupportDataSetSoapIn">
    <wsdl:part name="parameters" element="tns:getSupportDataSet" />
  </wsdl:message>
  <wsdl:message name="getSupportDataSetSoapOut">
    <wsdl:part name="parameters" element="tns:getSupportDataSetResponse" />
  </wsdl:message>
  

  <wsdl:portType name="WeatherWebService">
    <wsdl:operation name="getSupportDataSet">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">&lt;br&gt;&lt;h3&gt;获得本天气预报Web Services支持的洲、国内外省份和城市信息&lt;/h3&gt;&lt;p&gt;输入参数:无;返回:DataSet 。DataSet.Tables(0) 为支持的洲和国内省份数据,DataSet.Tables(1) 为支持的国内外城市或地区数据。DataSet.Tables(0).Rows(i).Item("ID") 主键对应 DataSet.Tables(1).Rows(i).Item("ZoneID") 外键。&lt;br /&gt;Tables(0):ID = ID主键,Zone = 支持的洲、省份;Tables(1):ID 主键,ZoneID = 对应Tables(0)ID的外键,Area = 城市或地区,AreaCode = 城市或地区代码。&lt;/p&gt;&lt;br /&gt;</wsdl:documentation>
      <wsdl:input message="tns:getSupportDataSetSoapIn" />
      <wsdl:output message="tns:getSupportDataSetSoapOut" />
    </wsdl:operation>
  </wsdl:portType>
  

  <wsdl:binding name="WeatherWebServiceSoap" type="tns:WeatherWebService">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="getSupportDataSet">
      <soap:operation soapAction="http://WebXml.com.cn/getSupportDataSet" 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="WeatherWebService">
    <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">&lt;a href="http://www.webxml.com.cn/" target="_blank"&gt;WebXml.com.cn&lt;/a&gt; &lt;strong&gt;天气预报 Web 服务,&lt;/strong&gt;数据来源于&lt;strong&gt;中国气象局&lt;/strong&gt; &lt;a href="http://www.cma.gov.cn/" target="_blank"&gt;http://www.cma.gov.cn/&lt;/a&gt; ,数据每2.5小时左右自动更新一次,准确可靠。包括 340 多个中国主要城市和 60 多个国外主要城市三日内的天气预报数据。&lt;/br&gt;此天气预报Web Services请不要用于任何商业目的,若有需要请&lt;a href="http://www.webxml.com.cn/zh_cn/contact_us.aspx" target="_blank"&gt;联系我们&lt;/a&gt;,欢迎技术交流。 QQ:8409035&lt;br /&gt;&lt;strong&gt;使用本站 WEB 服务请注明或链接本站:http://www.webxml.com.cn/ 感谢大家的支持&lt;/strong&gt;!&lt;br /&gt;&lt;span style="color:#999999;"&gt;通知:天气预报 WEB 服务如原来使用地址 http://www.onhap.com/WebServices/WeatherWebService.asmx 的,请改成现在使用的服务地址 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx ,重新引用即可。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;</wsdl:documentation>
    <wsdl:port name="WeatherWebService" binding="tns:WeatherWebServiceSoap">
      <soap:address location="http://www.webxml.com.cn/webservices/weatherwebservice.asmx" />
    </wsdl:port>
  </wsdl:service>


</wsdl:definitions>

 

 

自己做的项目中用axis2做webservice, 并与spring集成, 

 

这个集成方法比较麻烦, 找到了更简便的方法 http://renxiangzyq.iteye.com/blog/1021696

之前已经集成了,下面是我找到的一些集成点

web.xml

 

	<servlet>
		<servlet-name>AxisServlet</servlet-name>
		<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> 
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>AxisServlet</servlet-name>
		<url-pattern>/services/*</url-pattern><!--have to named as /services/-->
	</servlet-mapping>
 

WEB-INF  下的相关目录

 

.
├── conf
│   └── axis2.xml
├── modules
│   ├── addressing-1.5.2.mar
│   ├── axis2-jaxws-mar-1.5.2.mar
│   ├── mex-1.5.2.mar
│   ├── modules.list
│   ├── mtompolicy-1.5.2.mar
│   ├── ping-1.5.2.mar
│   ├── scripting-1.5.2.mar
│   └── soapmonitor-1.5.2.mar
├── services
│   ├── ecvservice
│   │   └── META-INF
│   │       └── services.xml
│   ├── services.list
│   └── version-1.5.2.aar
└── web.xml
 

 

 

接下来我要新加一个webservice

 

1. 首先用myeclipse的New。。。 里面wsdl生成一个wsdl模板, 然后自己在wsdl可视化设计器里定义输入, 输出

    这里要注意的是定义复杂类型是在设计器的一个叫types 的地方, 或者直接写source, 下面是个列子

 

    <wsdl:types>
        <xs:schema xmlns:ax23="http://webservice.xxxx.com" xmlns:ax24="http://webservice.xxxx.com/xsd" xmlns:ax22="http://business.webservice.xxxx.com/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://webservice.xxxx.com">
            <xs:complexType name="Entrydata">
                <xs:sequence>
                    <xs:element minOccurs="0" name="authToken" nillable="true" type="xs:string"/>
                    <xs:element minOccurs="0" name="url" nillable="true" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="Result">
                <xs:sequence>
                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
                    <xs:element minOccurs="0" name="status" nillable="true" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
            <xs:element name="getAuthToken">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element minOccurs="0" name="userName" nillable="true" type="xs:string"/>
                        <xs:element minOccurs="0" name="userId" nillable="true" type="xs:string"/>
                        <xs:element minOccurs="0" name="friendlyName" nillable="true" type="xs:string"/>
                        <xs:element minOccurs="0" name="email" nillable="true" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="getAuthTokenResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element minOccurs="0" name="entrydata" nillable="true" type="ax23:Entrydata"/>
                        <xs:element minOccurs="0" name="result" nillable="true" type="ax23:Result"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>
    </wsdl:types>
 

2. 在wsdl写好后就可以利用axis2的plugin来生成代码,可以生成服务器端和客户端的, 我主要是要服务器端的,把服务器端的代码copy要到项目中,

 

                ├── AserviceMessageReceiverInOut.java       //输入 输出 的转换对象
                ├── AserviceSkeleton.java                            //service类
                ├── AserviceSkeletonInterface.java              //接口
                ├── AuthRequest.java                                 //代表请求数据的类 负责请求数据的处理
                ├── AuthResponse.java                               //响应数据的类  负责响应数据
                ├── Entrydata.java                                     //复杂数据类型
                ├── ExtensionMapper.java                          //不用管的
                └── Result.java                                          //复杂数据类型
 

然后把│ ├── aservice

│   │   └── META-INF
│   │       └── services.xml

 放入WEB-INF/services/下

 

service.xml 内容如下

 

<?xml version="1.0" encoding="UTF-8"?>
<service name="aservice">
    <description>atservice - spring axis2 web service</description> 
    <parameter name="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier</parameter> 
    <parameter name="SpringBeanName">aWebService</parameter> 
    <messageReceivers > 
        <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out" class="com.xxxx.webservice.AserviceMessageReceiverInOut"/> 
    </messageReceivers> 
</service>

 

3. 接着启动服务器 访问   /services/aservice?wsdl 应该就可以看到wsdl , 但这个wsdl和原来里自己写的有些不一样了

你可能想自己修改(服务器生成的可能格式不对, 用soapui不能直接访问) , 可以把这个生成的wsdl  保存到一个文件中放到 WEB-INF/services/aservice/META-INF/下,然后自己按照想要的修改, 这个时候在去访问/services/aservice?wsdl看到的就是你自己修改过的了,

(但这里面的location会根据你访问的地址变化, 所以就不用担心wsdl里面的一些写死的地址相关的会在开发服务器和生产服务器切换的时候要去修改配置了)

 

<soap:address
				location="http://127.0.0.1:8080/xxxx/services/aservice.aserviceHttpSoap11Endpoint/" />

 是你访问127.0.0.1时的输出

 

<soap:address
				location="http://localhost:8080/xxxx/services/aservice.aserviceHttpSoap11Endpoint/" />

 是你访问localhost时的输出

 

最后完成的目标应该是soapui直接用访问 /services/aservice?wsdl生成的wsdl生成一个项目, 然后直接用默认的request可以去访问服务而不出异常

 

 

 

最开始的时候会报错

因为AuthRequest.java里面有句

 

 if (reader.isStartElement() && new javax.xml.namespace.QName("", "userName").equals(reader.getName())) {

 这里是两个QName做比较,  服务器端生成的

new javax.xml.namespace.QName("", "userName")

是没有namespace 的,  而客户端请求上来的是有namespace 的, 所以会出现Unexpected subelement

这里我在比较的时候加了QName.getLocalPart()去比较  就忽略了namespace对比较的影响

 

 

 

还有一个关于namespace  的讨论 

http://grails.1312388.n4.nabble.com/Grails-AXIS2-Web-Services-td3452513.html

分享到:
评论

相关推荐

    axis2+spring webservice

    1. **Apache Axis2 Web服务引擎**:了解其架构,包括模块化设计,消息处理器,以及WSDL(Web服务描述语言)到Java代码的编译过程。 2. **Spring框架集成**:学习如何使用Spring的`Axis2ServiceBean`或`Axis2...

    Axis2 接口生成wsdl工具

    总的来说,Apache Axis2作为一个强大的Web服务开发框架,提供了丰富的特性和集成选项,包括WSDL生成、Spring整合和RESTful服务支持,以及与Servlet容器如Tomcat的无缝集成,为开发者带来了极大的便利。通过理解和...

    springboot集成axis2-1.7.9实例

    在本文中,我们将深入探讨如何将Apache Axis2与Spring Boot集成,以构建一个高效、可扩展的Web服务应用。Apache Axis2是Java平台上的一个Web服务框架,它提供了高性能、灵活的服务开发和部署机制。而Spring Boot是...

    axis2 + spring3.2.0

    标题中的"axis2 + spring3.2.0"指的是在Java Web开发中,将Apache Axis2服务框架与Spring 3.2.0版本的依赖管理相结合的技术应用。Apache Axis2是一个用于构建Web服务和SOA(Service-Oriented Architecture,面向服务...

    使用Axis2整合Spring(二)

    5. **测试和调用**:现在,你可以像调用任何其他Axis2服务一样,通过WSDL地址测试和调用这些由Spring管理的服务。 此外,集成Spring和Axis2还能利用Spring的安全和事务管理功能,为Web服务提供更好的安全保障和事务...

    Spring集成axis2实现webservice所用到的包

    当我们需要在Spring项目中提供Web服务时,Axis2是一个常用的工具,它是一个高效的Web服务引擎,支持SOAP 1.1和1.2,以及RESTful服务。本篇文章将详细介绍如何在Spring中集成Axis2来实现Web服务,并且会提及相关的Jar...

    axis2发布webservice和调用axis2服务接口

    2. **使用Axis2的wsdl2java工具**:这个工具可以从WSDL文件生成Java客户端代码,包括服务代理类和服务接口。运行`wsdl2java`命令时,需要提供WSDL的URL或本地路径。生成的代码可以导入到项目中,方便调用服务。 3. ...

    Axis2集成Spring.doc

    ### Axis2集成Spring知识点 #### 一、概览 本文档旨在介绍如何将Apache Axis2与Spring框架进行集成,以实现灵活的服务部署和管理。在实际应用中,开发者可能需要利用Spring来管理业务对象(例如POJOs),并希望...

    spring axis2整合

    在IT行业中,Spring框架是Java企业级应用开发的首选,而Apache Axis2则是知名的Web服务引擎,用于处理SOAP协议和创建Web服务。本篇将详细探讨如何将Spring 3.2.5版本与Axis2 1.6.2版本进行整合,以便在Spring环境中...

    axis2+spring2.5整合(webservice)

    当我们谈论“Axis2+Spring2.5整合(Web服务)”时,我们指的是将Apache Axis2和Spring框架结合在一起,以便更高效地开发和管理Web服务。 Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了SOAP消息...

    axis2和axis2+spring发布服务指南

    标题中的“axis2和axis2+spring发布服务指南”指的是如何使用Apache Axis2框架结合Spring框架来部署和发布Web服务。Axis2是Apache软件基金会开发的一个用于构建和部署Web服务的开源框架,它基于Java语言并支持SOAP和...

    Axis2 Spring整合POJO开发Web服务

    当我们谈论"Axis2 Spring整合POJO开发Web服务"时,这意味着我们将使用Axis2来创建Web服务,并通过Spring框架来管理和控制这些服务,同时利用POJO(Plain Old Java Object)作为业务逻辑的核心。 首先,让我们深入...

    axis2相关的jar包

    axis2-spring-1.5.4.jar axis2-transport-http-1.5.4.jar axis2-transport-local-1.5.4.jar axis2-xmlbeans-1.5.4.jar commons-httpclient-3.1.jar httpcore-4.0.jar neethi-2.0.4.jar wsdl4j-1.6.2.jar XmlSchema-...

    axis整合spring

    2. **创建Axis服务**:利用Axis的工具,如wsdl2java,从WSDL文件生成Java服务类和客户端 stubs。 3. **Spring Bean注册**:将Spring生成的Bean注册到Axis的Service中,通常通过实现SpringBeanAware接口或者自定义...

    Spring整合axis2经典

    Spring整合Axis2经典案例解析 在Java Web服务开发中,Spring框架和Apache Axis2是两个重要的组件。Spring作为一款强大的企业级应用框架,提供了一种模块化、灵活的方式来构建应用程序,而Axis2则是Apache组织提供的...

    Axis2集成Spring发布WebServices服务

    ### Axis2集成Spring发布WebServices服务 #### 一、概览 在当今的企业级应用开发中,集成多种技术框架以实现高效稳定的服务交互是常见需求之一。Axis2作为一款高性能的开源Web服务栈,提供了丰富的功能来支持SOAP、...

    axis2和spring结合发布WebService

    至于压缩包文件名称“axis2spring”,很可能是包含了一组示例代码或教程,用于演示如何将Axis2和Spring集成以发布Web服务。这些资源可能包括Spring配置文件、服务实现类、测试用例等,帮助开发者理解实际操作流程。 ...

    spring3 + axis2

    Axis2支持多种Web服务标准,如SOAP、WSDL、WS-Addressing等,并且可以与各种数据绑定技术(如XMLBeans、Aegis、JAXB等)配合使用。此外,Axis2提供了丰富的扩展机制,允许自定义处理逻辑。 【Spring3与Axis2的整合...

    web serivce axis&spring

    2. **创建Web服务**:使用Axis生成Java类或WSDL,这将作为Web服务的基础。 3. **集成到Spring**:将生成的Web服务类作为Spring bean,通过`@WebService`注解标记,然后在Spring配置文件中声明这个bean。 4. **处理...

    axis1.4jar包以及WSDL和服务端代码互转方法

    使用-axis.wsdl选项运行wsdl2java工具,指定你的服务类,它将自动生成对应的WSDL文件。 2. **从WSDL生成服务端代码**: 反之,如果你有一个WSDL文件,可以使用Axis1.4将其转换为Java服务端代码。同样,确保Eclipse...

Global site tag (gtag.js) - Google Analytics