在现有系统中通过stubs方式部署 webservice

    技术2022-05-19  32

    最近,我们的销售系统收到客户的要求,要求能为统一的DLR门户提供webservice接口服务,以期整合管理客户的系统入口。

     

    客户提出

    1.首先需要系统提供用户名和密码给portal

    2.屏蔽账户的添加、修改、删除的功能

    3.提供账户添加、删除、修改、获得所有账户的webservice接口,用于portal系统进行统一账户的管理

    3.提供DLR清单列表的webservice,用于portal系统对dlr信息的维护

    在现有的系统里头,如何改善方能达到目的呢?

    采用AXIS框架

    1、搭建AXIS环境

    安装环境 J2SE SDK 1.4,weblogic8.1sp4,eclipse 3.2。

    到 http://xml.apache.org 网站下载Axis1.4安装包。

    将Axis相关包文件放在WEB-INF/lib目录下。

    Axis可选的包(需另行下载):activation.jar; mail.jar; xmlsec-1.4.jar拷贝到WEB-INF目录下,生成客户端时候需要使用。

    weblogic启动时加载以上jar包(startWeblogic.Cmd)

    2、web.xml增加以下

     <!---for web servicewebservice类服务的映射配置-->  <servlet>    <servlet-name>AxisServlet</servlet-name>    <servlet-class>        org.apache.axis.transport.http.AxisServlet    </servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>AxisServlet</servlet-name>    <url-pattern>/AxisServlet</url-pattern>  </servlet-mapping>  <!---jws -->  <servlet-mapping>    <servlet-name>AxisServlet</servlet-name>    <url-pattern>*.jws</url-pattern>  </servlet-mapping>    <servlet-mapping>    <servlet-name>AxisServlet</servlet-name>    <url-pattern>/services/*</url-pattern>  </servlet-mapping>

    3、weblogic.xml增加以下

    解决webservice8.1中所带的webservices.jar和axis中的saaj.jar冲突问题

      <container-descriptor>     <prefer-web-inf-classes>true</prefer-web-inf-classes>   </container-descriptor>

    4、启动weblogic web服务

    访问 http://localhost:7002/services,显示AXIS框架的内置服务画面

    And now... Some Services

    AdminService (wsdl) AdminService Version (wsdl) getVersion

    5、HelloWorld类

    package cn.com.toyota.sales.webservice.hello;

    public class SayHello { public String getName(String name){  return "hello!" + name; } public int add(int a,int b){  return a + b; }}

    6、编写wsdd文件

    <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">    <service name="SayHello" provider="java:RPC">    <parameter name="className" value="cn.com.toyota.sales.webservice.hello.SayHello"/>    <parameter name="allowedMethods" value="*"/>    </service>    </deployment>

    7、编辑一个deploy.bat

    set Axis_Lib=D:/watool/cdist/libset Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%/set Axis_Servlet=http://localhost:7002/AxisServlet%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% D:/watool/cdist/www/public_html/WEB-INF/deploy.wsdd

    执行这个批处理文件

    这时候,如果提示成功的话,访问http://localhost:7002/services 就会显示服务列表。

    And now... Some Services

    AdminService (wsdl) AdminService Version (wsdl) getVersion SayHello (wsdl) getName add

    8、生成客户端client stub文件

    在浏览器上访问服务器端的服务,可以下载到WSDL文件,通过Axis的相关工具,可以自动从WSDL文件中生成Web Service的客户端代码。

    WSDL2Java.bat:

    set Output_Path=D:/work/projects/Eclipse_Projects/jdk14/cdist/srcset Package=cn.com.toyota.sales.webservice.helloset Axis_Lib=D:/watool/cdist/libset Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%set Axis_Servlet=http://localhost:7002/AxisServlet%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% http://localhost:7002/services/SayHello?wsdl

    9、Source生成

    SayHello_PortType.java、SayHelloService.java、SayHelloServiceLocator.java、SayHelloSoapBindingStub.java

    package cn.com.toyota.sales.webservice.hello;

    public class SayHelloClient { public void execute() throws Exception {       SayHelloService service = new SayHelloServiceLocator();  System.out.println("----------------------");  SayHello_PortType client = service.getSayHello() ;       String retValue = client.getName("No.1");       System.out.println(retValue);       } /**  * @param args  */ public static void main(String[] args) throws Exception{  // TODO Auto-generated method stub  SayHelloClient c = new SayHelloClient();  c.execute(); }}

    执行以上程序,结果显示:

    ----------------------hello!No.1

    好的,成功~


    最新回复(0)