一、WebService:
调用给定位置WebService的Client端代码:
1 import org.apache.axis.client.Call;
2 import org.apache.axis.client.Service;
3 import javax.xml.namespace.QName;
4
5 public class TestClient {
6 public static void main(String [] args) {
7 try {
8 String endpoint =
9 "http://nagoya.apache.org:5049/axis/services/echo";
10
11 Service service = new Service();
12 Call call = (Call) service.createCall();
13
14 call.setTargetEndpointAddress( new java.net.URL(endpoint) );
15 call.setOperationName(new QName("http://soapinterop.org/", "echoString"));
16
17 String ret = (String) call.invoke( new Object[] { "Hello!" } );
18
19 System.out.println("Sent 'Hello!', got '" + ret + "'");
20 } catch (Exception e) {
21 System.err.println(e.toString());
22 }
23 }
24 }
SOAP request 内容:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:echoString xmlns:ns1="http://soapinterop.org/">
<arg0 xsi:type="xsd:string">Hello!</arg0>
</ns1:echoString>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
发布WebService:
1、jws文件
2、通过AdminClient类向Application Server部署
二、AXIS+TOMCAT
1、 为测试webservice准备axis配置:
完成从java类文件生成wsdl,对应的命令如下:
java -classpath .;%AXISCLASSPATH%; org.apache.axis.wsdl.Java2WSDL -o TestService.wsdl -l"http://172.16.87.18:8000/axis/services/ TestService " -n "http://172.16.87.18:8000/axis/services/ TestService " -p"com.zzxy.test. TestService" "http://172.16.87.18:8000/axis/services/TestService" com.zzxy.test. TestService
对生成wsdl文件运行WSDL2Java生成新的接口、service、servicelocater、stub、skeleton等辅助类文件,包括部署(卸载)文件deploy.wsdd undeploy.wsdd。对应的命令如下:
java -classpath .;%AXISCLASSPATH% org.apache.axis.wsdl.WSDL2Java -o ../src -d Session -s -S true -N http://172.16.87.18:8000/axis/services/service com.zzxy.TestService TestService.wsdl
编译生成的java文件:
部署:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient -lhttp://
172.16.87.18:8000/axis/services/AdminService deploy.wsdd
动态报表的ant例子
<?xml version="1.0" encoding="gbk"?>
<project name="axis" default="make" basedir=".">
<!--设置部署axis web-service运行的属性及类包-->
<property name="axis.home" value="D:/axis"/>
<property name="axis.gensrcdir" value="${src.dir}/"/>
<property name="webservice.name" value="xybbwebservice"/>
<property name="local.wsdl" value="${axis.gensrcdir}/${webservice.name}.wsdl"/>
<property name="axis.server" value="172.16.87.18"/>
<property name="axis.port" value="7000"/>
<property name="axis.name" value="axis"/>
<property name="targetNameSpace" value="http://${axis.server}:${axis.port}/${axis.name}/service/${webservice.name}"/>
<!--从axis-ant.jar的properties文件中得到所有的ant task任务列表-->
<taskdef resource="axis-tasks.properties" classpathref="axis.classpath" />
<!--从java类文件生成需要的部署描述文件-->
<target name="wsdl">
<axis-java2wsdl output="${local.wsdl}" location="http://${axis.server}:${axis.port}/${axis.name}/services/${webservice.name}"
namespace="${targetNameSpace}" classname="com.xinyuan.dtbb.Xybb">
<mapping namespace="${targetNameSpace}" package="com.xinyuan.dtbb.webservice"/>
</axis-java2wsdl>
</target>
<!--从wsdl文件生成需要的java文件-->
<target name="java2">
<axis-wsdl2java output="${axis.gensrcdir}" testcase="true" verbose="true" url="${local.wsdl}" serverside ="true"
deployscope ="Session">
<mapping namespace="${targetNameSpace}" package="com.xinyuan.dtbb.webservices" />
</axis-wsdl2java>
</target>
<!--编译axis wsdl2java生成的Helper文件-->
<target name="ws-compile" depends="">
<!--Compile Java source files-->
<javac srcdir="${axis.gensrcdir}" destdir="${compile.outdir}" debug="on" encoding="GBK">
<classpath>
<path refid="classpath"/>
<path refid="axis.classpath"/>
</classpath>
<include name="**/*.java"/>
<exclude name="**/*TestCase.java"/>
</javac>
</target>
<!--部署axis webservice-->
<target name="ws-deploy">
<axis-admin port="${axis.port}" hostname="${axis.server}" failοnerrοr="true"
servletpath="/axis/servlet/AxisServlet" debug="true" xmlfile="${local.wsdl}"/>
</target>
</project>
二、OC4J
需要用OC4J专用的函数按照一定的要求进行配置
将EJB部署为WebService的配置文件
<web-service>
<!-- More of the same boilerplate... -->
<display-name>Session Bean as a Web Service</display-name>
<description>
Exposing the stateless Session Bean com.xinyuan.dtbb.xybbservice as a Web Service under the endpoint: /xybb/xybbWS.
This will result in the generation of ws-xybb.ear, which can be deployed in OC4J.
</description>
<destination-path>./ws-xybb.ear</destination-path>
<temporary-directory>./tmp</temporary-directory>
<context>/ws-xybb_web</context>
<!-- This service is based on a stateless session bean. -->
<stateless-session-ejb-service>
<!-- As before: the Web Service URL under the servlet context -->
<uri>/xybbWS</uri>
<!-- Location and name of the session bean that is to be deployed as a Web Service -->
<path>./xybbservice.jar</path>
<ejb-name>XybbService</ejb-name>
</stateless-session-ejb-service>
<!-- define additional Web Services as required -->
</web-service>
部署的ant脚本:
<?xml version="1.0" encoding="gbk"?>
<project name="ws-xybb" default="make" basedir=".">
<!--设置部署oc4j web-service运行的属性及类包-->
<property name="oc4j.home" value="D:/jdev9052"/>
<property name="config.name" value="ws-xybb"/>
<property name="src.dir" value="../src"/>
<property name="ws-oc4j-src.dir" value="${src.dir}/webservice/oc4j"/>
<property name="build.dir" value="../build"/>
<property name="ws-oc4j-build.dir" value="${build.dir}/webservice/oc4j"/>
<property name="ejb.name" value="xybbservice"/>
<property name="app.deploy.name" value="ws-xybb"/>
<property name="web.deploy.name" value="ws-xybb_web"/>
<property name="oc4j.host" value="172.16.87.18"/>
<property name="ormi.port" value="23791"/>
<property name="deploy.name" value="23791"/>
<property name="admin.user" value="admin"/>
<property name="admin.passwd" value="123456"/>
<target name="init">
<delete file="${ws-oc4j-build.dir}/${app.deploy.name}.ear"/>
<delete file="${ws-oc4j-src.dir}/${app.deploy.name}.ear"/>
<copy file="${build.dir}/${ejb.name}.jar" todir="${ws-oc4j-src.dir}"/>
</target>
<!--从xml配置文件生成需要的ear文件(详细配置信息在该xml文件中)-->
<target name="generate" depends="init">
<java jar="${oc4j.home}/webservices/lib/WebServicesAssembler.jar" dir="${ws-oc4j-src.dir}" fork="true">
<arg line="-config ${config.name}.xml"/>
</java>
<copy file="${ws-oc4j-src.dir}/${app.deploy.name}.ear" todir="${ws-oc4j-build.dir}/"/>
</target>
<!--把生成的ear文件部署到oc4j容器-->
<target name="deploy" depends="generate">
<java jar="${oc4j.home}/j2ee/home/admin.jar" dir="${ws-oc4j-src.dir}" fork="true">
<arg line="ormi://${oc4j.host}:${oc4j.port} ${admin.user} ${admin.passwd} -deploy -file ${app.deploy.name}.ear -deploymentName ${app.deploy.name}"/>
</java>
</target>
<!--将部署oc4j webservice绑定到webservice的配置文件内指定的uri之上-->
<target name="bind" depends="deploy">
<java jar="${oc4j.home}/j2ee/home/admin.jar" dir="${ws-oc4j-src.dir}" fork="true">
<arg line="ormi://${oc4j.host}:${oc4j.port} ${admin.user} ${admin.passwd} -bindWebApp ${app.deploy.name} ${web.deploy.name} http-web-site /${web.deploy.name}"/>
</java>
</target>
<target name="all" depends="bind"/>
</project>
三、JBOSS
需要jboss-net.sar,在all的配置中,标准的axis部署出错。