微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于.NET和AXIS交流webservice的开发

     此次所做的是使用axis为.NET提供webservice,关于.NET和axis数据webservice数据交流的文章,有一篇很有借鉴性的文章http://web.nchu.edu.tw/~jlu/cyut/axis/axis1net.shtml#aspx)。该次做webservice使用服务调用方提供server的wsdl生成我们自己的服务方法。做法如下:

      1.先根据wsdl生成所有的类和deploy.wsdd文件方法:下载Axis地址 http://apache.freelamp.com/ws/axis/1_4/axis-bin-1_4.zip
 解压axis-bin-1_4.zip文件.运行CMD,切换到wsdl的当前目录. 
输入命令 
java -Djava.ext.dirs=E:/DataFiles/StudyDataFiles/JAVA/axis/axis-bin-1_4/lib org.apache.axis.wsdl.WSDL2Java -t -B -v -D -s -p com.chinamworld.services -c com.chinamworld.services.IsmpSpEngineImpl IsmpSpEngine.wsdl
com.chinamworld.services为生成JAVA文件的包名。

我直接使用的是jbuilder2006生成一个部署的工程,并使用jbuilder2006的axis来生成类和deploy.wsdd

D:/jbpace/ynyd>java -Djava.ext.dirs=D:/JBuilder2006/thirdparty/ws-axis/lib org.apache.axis.wsdl.WSDL
 2Java -t -B -v -D -s -pWebService.EMAS  -cWebService.EMAS. DataimportServer DataimportServer.wsdl
  

 java -Djava.ext.dirs=D:/JBuilder2006/thirdparty/ws-axis/lib org.apache.axis.wsdl.WSDL2Java -t -B -v -D -s -p WebService.EMAS  DataimportServer.wsdl
2.将需要的jar添加到工程的web-inf下的lib中,将类文件也拷贝到此。

注意,不要用jbuilder2006将新生成的类发布为webservice或使用jbuilder2006的axis.wsdd来生成webservice,那应该是不可能完成的。

3.自己手工写一个server-config.wsdd放置在web-inf下。将deploy.wsdd的<service。。。。service/>之间的内容添加在server-config.wsdd中,基本就完成webservice的server开发,部署就根据环境的需要做调整。

4.部署成功,首先要验证jar满足服务发布吗?在JBuilder Apache Axis Admin Console下Validate the local installation's configuration 。View the list of deployed web services 可以看到工程上发布的webservice。点击DataimportServerSoap (wsdl) wsdl可以看到xml文件样式就说明发布成功。

5.期间有些错误,我使用了自己的方式解决

 <operation name="importStationData" qname="operNS:ImportStationData" xmlns:operNS="EMAS.WebService" returnQName="retNS:ImportStationDataResult" xmlns:retNS="EMAS.WebService" returnType="rtns:string" xmlns:rtns="http://www.w3.org/2001/XMLSchema" soapAction="EMAS.WebService/ImportStationData" >
        <parameter qname="pns:dt" xmlns:pns="EMAS.WebService" type="tns:>>ImportStationData>dt" xmlns:tns="EMAS.WebService"/>
      </operation>
      <parameter name="allowedMethods" value="importStationData"/>

 

<typeMapping
        xmlns:ns="EMAS.WebService"
        qname="ns:>>ImportStationData>dt"
        type="java:WebService.EMAS.ImportStationDataDt"
        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
        deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
        encodingStyle=""
      />

 

使用deploy的service时操作方法的写法是如上的;但查看wsdl会有如下的错:

Fault - makeTypeElement() was told to create a type "{EMAS.WebService}>>ImportStationData>dt",with no containing element
AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
 faultSubcode:
 faultString: makeTypeElement() was told to create a type "{EMAS.WebService}>>ImportStationData>dt",with no containing element
 faultActor:
 faultNode:
 faultDetail:
 {http://xml.apache.org/axis/}hostname:miika 不能看到wsdl的xml。

 

6.后来我去掉所有的<operation 。。。/>并将其修改为如下:

   <parameter name="allowedMethods" value="*" />
   <parameter name="scope" value="Application" />

查看wsdl仍然还有上面的错误。 我将所有的<typeMapping />删除,可以看到正常的wsdl的xml。

另将<typeMapping />的内容修改如下也可以看到正常的wsdl的xml:

    <typeMapping
        xmlns:ns="EMAS.WebService"
        qname="ns:>>ImportStationData>dt"
        type="java:WebService.EMAS.ImportStationDataDt"
        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
        deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
        name=">>ImportStationData>dt"
      />

但两样都有后台的信息如下:

- The class org.w3c.dom.NamednodeMap does not contain a default constructor,which is a requirement
for a bean class.  The class cannot be converted into an xml schema type.  An xml schema anyType wil
l be used to define this class in the wsdl file.
- The class org.w3c.dom.NodeList does not contain a default constructor,which is a requirement for
a bean class.  The class cannot be converted into an xml schema type.  An xml schema anyType will be
 used to define this class in the wsdl file.
- The class org.w3c.dom.Node does not contain a default constructor,which is a requirement for a be
an class.  The class cannot be converted into an xml schema type.  An xml schema anyType will be use
d to define this class in the wsdl file.
- The class javax.xml.soap.soAPElement is defined in a java or javax package and cannot be converted
 into an xml schema type.  An xml schema anyType will be used to define this class in the wsdl file.

- The class java.util.Iterator is defined in a java or javax package and cannot be converted into an
 xml schema type.  An xml schema anyType will be used to define this class in the wsdl file.
- The class org.xml.sax.Attributes does not contain a default constructor,which is a requirement fo
r a bean class.  The class cannot be converted into an xml schema type.  An xml schema anyType will
be used to define this class in the wsdl file.
- The class org.apache.axis.encoding.DeserializationContext does not contain a default constructor,
which is a requirement for a bean class.  The class cannot be converted into an xml schema type.  An
 xml schema anyType will be used to define this class in the wsdl file.
- The class javax.xml.soap.Name is defined in a java or javax package and cannot be converted into a
n xml schema type.  An xml schema anyType will be used to define this class in the wsdl file.
- The class org.apache.axis.soap.soAPConstants does not contain a default constructor,which is a re
quirement for a bean class.  The class cannot be converted into an xml schema type.  An xml schema a
nyType will be used to define this class in the wsdl file.
- The class javax.xml.soap.soAPBody is defined in a java or javax package and cannot be converted in
to an xml schema type.  An xml schema anyType will be used to define this class in the wsdl file.
- The class javax.xml.soap.soAPHeader is defined in a java or javax package and cannot be converted
into an xml schema type.  An xml schema anyType will be used to define this class in the wsdl file.
- The class org.apache.axis.schema.SchemaVersion does not contain a default constructor,which is a
requirement for a bean class.  The class cannot be converted into an xml schema type.  An xml schema
 anyType will be used to define this class in the wsdl file.
- The class org.apache.axis.encoding.Deserializer does not contain a default constructor,which is a
 requirement for a bean class.  The class cannot be converted into an xml schema type.  An xml schem
a anyType will be used to define this class in the wsdl file.


但有生成和使用过的人说出现上面不能查看wsdl的错误和后面能看到wsdl但后台错的情形服务也能正常提供,就服务不稳定。

 

7.可以命令生成server-config.wsdd:

java -Djava.ext.dirs=D:/JBuilder2006/thirdparty/ws-axis/lib org.apache.axis.client.AdminClient -lhttp://localhost:7001/irmsWS/servlet/AxisServlet deploy.wsdd
查看服务的wsdl时,后台报错同6.

 

我也将做尽量的测试。


 注意:

在Axis里书写deploy.wsdd并利用org.apache.axis.client.AdminClient发布,其主要工作就是把<service>标签中的内容添加在server-config.wsdd里,所以一般直接编辑server-config.wsdd文件会更方便一些。不过当你还没有server-config.wsdd文件时,使用deploy.wsdd的方法会更方便些,因为AdminClient会帮你生成一些额外的xml元素(<handler>等等),而这些元素是必要的。

 

 使用该方式可以直接生成一部分客户端代码

 java -Djava.ext.dirs=D:/JBuilder2006/thirdparty/ws-axis/lib org.apache.axis.wsdl.WSDL2Java http://10.168.65.35:7001/NewWebService/services/InterSwitchOmmWebService?wsdl

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐