最近,我们的销售系统收到客户的要求,要求能为统一的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框架的内置服务画面
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 就会显示服务列表。
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
好的,成功~