`

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 接口生成wsdl工具

    webserice开发工具。Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术。

    Axis2集成Spring.doc

    本示例是在 Axis2 通过 外部 Spring容器 获取指定的实现Bean,以提供服务。全部自己写WSDL和服务实现类,不使用 Axis2提供的 Java2WSDL 和 WSDL2Java 工具

    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-...

    完整的axis2 jar包包含实例.zip

    --&gt;axis2-spring-1.6.1.jar --&gt;axis2-transport-http-1.6.1.jar --&gt;XmlSchema-1.4.7.jar --&gt;wsdl4j-1.6.2.jar --&gt;axiom-api-1.2.12.jar --&gt;axiom-impl-1.2.12.jar --&gt;neethi-3.0.1.jar --&gt;axis2-transport-...

    axis2相关jar包~eclipse支持插件包

    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-...

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

    内有axis1.4jar包以及使用eclipse和axis1.4 将WSDL和服务端代码互转方法 亲测可用

    AXIS2实现webservice jar包

    axis2-spring-1.7.4.jar axis2-transport-http-1.7.4.jar axis2-transport-local-1.7.4.jar axis2-xmlbeans-1.7.4.jar bcel-findbugs-6.0.jar commons-cli-1.2.jar commons-codec-1.3.jar commons-fileupload-1.3.1....

    wsdl2java源码-Axis1WebService:Axis1WebService例子,通过wsdl文件生成服务器端代码并部署

    由于联通提供WSDL版本旧(2009),尝试过Axis2,Apache CXF,Spring WS,都不能满足需求; 以 获取手机号信息的wsdl为例子 生成过程 先将tool\asix1.4\asix\WEB-INF拷贝到新建web项目的WEB-INF cd tool wsdl2java.bat ...

    axis1.4.jar和wsdl4j.jar和jaxrpc.jar

    Axis1版本开发WebSerivce所需要的包

    springboot-wsdl.java

    springboot调用webservice接口的两种方式,不使用axis

    webservice :spring 3+cxf3.4服务方,AXIS1.4请示方调用

    使用spring3+ cxf 3.4做服务方,Axis1.4做请求方,在调用的时候,通过转换cxf的wsdl格式为axis1.4的wsdl格式来达到调用的目的。

    使用XFire+Spring构建Web+Service

    1 支持一系列Web Service的新标准--JSR181、WSDL2.0 、JAXB2、WS-Security等; 2 使用Stax解释XML,性能有了质的提高。XFire采用Woodstox 作Stax实现; 3 容易上手,可以方便快速地从pojo发布服务; 4 支持...

    WebService大讲堂之Axis2

    WebService大讲堂之Axis2(7):将Spring的装配JavaBean发布成WebService ................................... 26 WebService大讲堂之Axis2(8):异步调用WebService ..................................................

    WebService Axis和XFire(CXF)的开发流程

    WebService当服务端两种生成wsdl协议方式,Axis和XFire(CXF)前者搞过WebService的人应该都知道扩展性比较好但是不支持Spring,后者基本逻辑全都封装在了底层API中,模式比较固定,开发比Axis简单,但是没有Axis灵活。...

    271个java需要用的jar包

    axis2-java2wsdl-1.0.jar builder-0.6.2.jar c3p0-0.9.1.2.jar cglib-2.2.2.jar cglib-2.2.jar classworlds-1.1.jar com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar com.springsource.net.sf.cglib-2.2.0.jar ...

    springboot动态调用webservice接口

    最近项目中遇到需要去掉老系统的webservice服务中的insert方法,找了很久,发现这样最简单,实测有效!!!

    springmvc和mybatis集成全部jar包(全)

    lib/axis-wsdl4j-1.5.1.jar lib/cglib-2.2.2.jar lib/com.springsource.javax.xml.rpc-1.1.0.v20110517.jar lib/commons-chain-1.2.jar lib/commons-dbcp-1.4.jar lib/commons-pool-1.5.4.jar lib/gson-2.1....

    webservices

    webservices的开发方式有三种,axis2,xfire,cxf,这里使用的是比较受欢迎的cxf结合spring的方式来写的,数据库是Oracle,把此项目直接导入工程里面就能用,要改一下数据库的链接,然后在执行localhost:8080/...

    Web Service 接口的发布与调用

    1.采用cxf集成Spring实现webservice接口的发布。...2.(调用一)用eclipse根据wsdl连接自动生成java代码实现接口的调用。 3.(调用二)用axis2实现接口调用。 4.开发环境:eclipse+jdk1.8+tomcat8.5

Global site tag (gtag.js) - Google Analytics