A.如何获得 WSDL 文件
-
在“应用程序”窗格中,浏览至要为其生成 WSDL 文件的 JWS 文件。
-
在“应用程序”窗格中用鼠标右键单击 JWS 文件,然后选择“生成 WSDL 文件”。
-
如果 JWS 文件的名称是 MyService.jws,则在同一目录中创建名为 MyServiceContract.wsdl 的文件。默认情况下,WSDL 文件链接到从中生成它的 JWS 文件,这意味着当更改 JWS 文件时会重新生成 WSDL 文件。
Web Service 的 WSDL 文件可用于任何可到达 Web Service 的 URL 的潜在客户端。从 WebLogic Server 获取 Web Service 的 WSDL 文件:
-
在浏览器中,浏览至附加了 ?WSDL 的 Web Service 的 URL。例如:http://myServer:7001/MyProject/MyWebService.jws?WSDL
-
使用浏览器的“文件”-->“另存为”功能将 WSDL 文件保存到本地机器。请注意,某些浏览器将在已保存文件的顶部和底部包含 HTML 标记。必须使用文本编辑器删除这些标记以生成有效的 WSDL 文件。
B.用deploy.wsdd生成server-config.WSDD文件
在%TOMCAT_HOME%/webapps/axis/WEB-INF下新建deploy.wsdd文件,即SOAP服务发布描述文件 deploy.wsdd <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="HelloWorld" provider="java:RPC"> <parameter name="className" value="HelloWorld"/> <parameter name="allowedMethods" value="sayHello"/> </service> </deployment> 在%TOMCAT_HOME%/webapps/axis/WEB-INF目录下执行下列语句 java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/services/AdminService deploy.wsdd 要注意的是 -Djava.ext.dirs=lib这个参数,这个参数可以使你编译过程中动态调用axis.jar包。而不需要事先在系统变量里配置axis.jar包的路径。另外,-lhttp://之后只有axis这个字符串可以根据项目名称的不同而修改,其他的都是必然写法。
C.用wsdl文件生成客户端的java文件
在%TOMCAT_HOME%/webapps/axis/WEB-INF目录下执行下列语句 java -Djava.ext.dirs=./web/WEB-INF/lib org.apache.axis.wsdl.WSDL2Java http://localhost:5888/szcg/services/businessService?wsdl -t
总结,server-config.wsdd文件得靠自己写(暂时这么认为,不知道有没有工具可以根据服务端java类自动产生,自己也可以写一个)下面为客户端代码解释:
String endpoint = "http://172.31.0.42:8888/test/services/testService?wsdl"; Service service = new Service(); Call call call = (Call) service.createCall();
QName qn = new QName("process"); QName qx = new QName("urn:BeanService", "CommonResult"); call.setOperationName(qn);//设置你要调用的远程方法名 call.registerTypeMapping(CommonResult.class, qx, new BeanSerializerFactory(CommonResult.class, qx), new BeanDeserializerFactory(CommonResult.class, qx));//序列化和反序列化传回的参数,如无自定义的类可不设置这个参数
call.setTargetEndpointAddress(new java.net.URL(endpoint));//设置要调用远程方法的类,类可在server-config.wsdd配置文件里找到, call.setUseSOAPAction(true); String params = "<?xml version='1.0' encoding='UTF-8'?><request><function name='feedback'/><params><xmbh>a</xmbh><qsdw>b</qsdw><sgyj>c</sgyj><txsj>2008-07-03 17:35:00</txsj><txr>d</txr></params></request>";//用xml写成传入参数,这样可以简化参数个数,参数可任意增加和减少
CommonResult obj1=(CommonResult) call.invoke(new Object[] { params });
server-config.wsdd配置文件是axis.jar文件中会自动调用.
测试axis服务器是否设置好可以在浏览器里输入http://172.31.0.42:8888/test/services/testService?wsdl,无错误则表示wsdd配置文件无误.
如在项目中加入webservic刚要在web.xml文件里加入
<servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> <load-on-startup>5</load-on-startup> </servlet><servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>