本文分两部分介绍如何在 o2server 服务器中调用 webServices(jaxws)服务.
第一部分介绍如何在tomcat上搭建一个webServices(jaxws)服务.
第二部分介绍如何在o2server服务器上来调用上面创建的服务.
O2OA (翱途)官网:http://www.o2oa.net
一、在tomcat上搭建一个webServices服务
介绍如何编写托管在 Apache Tomcat 服务器上运行的 Java XML Web 服务 (JAX-WS) 的 Java Web 应用程序.本教程重点介绍使客户端能够访问部署在 Tomcat 上的 Web 服务的项目配置.
-
添加 JAX-WS 运行时依赖关系
请将以下依赖项添加到项目的 pom.xml 文件中:
<dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artifactId> <version>2.3.2</version> </dependency>
-
创建一个简单的 XML/SOAP Web 服务
创建一个简单的 Java XML Web 服务类,如下所示:
package net.o2oa.scratch.tomcat9.jaxws; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; @WebServicepublic class JaxwsEcho { @WebMethod @SOAPBinding(style = Style.DOCUMENT) public String sayHello(String name) { return "Hello, " + name + "!"; } }
配置 webServices 服务点
<?xml version="1.0" encoding="UTF-8"?><endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"> <endpoint name="JaxwsEcho" implementation="net.o2oa.scratch.tomcat9.jaxws.JaxwsEcho" url-pattern="/ws/echo"/> </endpoints>
-
配置 JAX-WS 侦听器和 Servlet
将以下 XML 代码添加到 Web 部署描述符文件 (web.xml):
<listener> <listener-class> com.sun.xml.ws.transport.http.servlet.WSServletContextListener </listener-class></listener> <servlet> <servlet-name>JAXWSServlet</servlet-name> <servlet-class> com.sun.xml.ws.transport.http.servlet.WSServlet </servlet-class> <load-on-startup>1</load-on-startup></servlet> <servlet-mapping> <servlet-name>JAXWSServlet</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping>
-
查看接口
将以上程序进行打包,打包成scratch_tomcat9.war. 然后将文件复制到Tomcat9的webapps目录下,启动tomcat. 访问http://127.0.0.1:8080/sctatch_tomcat9/ws/echo,可以看到:
-
tomcat webSerivces 样例 scratch_tomcat9.war
二、o2server调用webServices(jaxws)
2.1 在流程中的"服务调用"活动中调用webService(jaxws)
填入以下参数
WSDL地址:
http://127.0.0.1:8080/scratch_tomcat9/ws/echo?wsdl
调用方法:
sayHello
参数脚本: this.parameters.add("O2OA"); 响应脚本: var txt = "webServices响应:";print(txt + this.response.get()[0]);
这样我们就完成了调用外部webServices(jaxws)的配置.
流程运行至服务调用活动后服务端可以看到输出日志:
这样就正确的调用到了webServices(jaxws).
2.2 在脚本中调用soap(jaxws)方法访问webServices(jaxws)
我们同样可以在脚本中调用webServices(jaxws)服务,系统已经注入了服务对象以方便webServices(jaxws)调用.
在事件中通过调用this.services()对象可以获得调用webServices(jaxws)的封装对象.
var ObjectArray = Java.type("java.lang.Object[]"); var param = new ObjectArray(1); param[0] = "O2OA"; var resp = this.service.soap("http://127.0.0.1:8080/scratch_tomcat9/ws/echo?wsdl", "sayHello", param);print("soap响应:" + resp[0])
流程运行至脚本所在的事件后可以看到输出日志:
这样就正确的调用到了webServices(jaxws).
在服务中soap和jaxws这两个方法是等价的.
如果对方的webServices需要一些额外的数据才可以访问,比如需要认证信息,那么可以调用带请求头参数的方法进行访问.
2.3 在脚本中通过发送xml直接调用webServices(jaxws)
特殊使用场景下也可以直接发送xml的方式来调用webServices(jaxws).
var xml ="<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:jax="http://jaxws.tomcat9.scratch.o2oa.net/">"; xml += "<soapenv:Header/>"; xml += "<soapenv:Body>"; xml += "<jax:sayHello>"; xml += "<arg0>张三</arg0>"; xml += "</jax:sayHello>"; xml += "</soapenv:Body>"; xml += "</soapenv:Envelope>"; var resp = this.service.soapXml("http://127.0.0.1:8080/scratch_tomcat9/ws/echo?wsdl", xml); print("soap xml 响应:" + resp[0]);
直接向服务地址发送xml报文调用服务: