原文地址:http://wso2.org/library/90
Q:如何将基于Axis2的Web Service集成到自己的webapp?
A:让我们试着发布一个简单的Axis2到我们自己的webapp中。首先我们需要将Axis2 Servlet写到我们的web.xml中。看下面一段:
<web-app> <servlet> <servlet-name>AxisServlet</servlet-name> <display-name>Apache-Axis Servlet</display-name> <servlet-class> org.apache.axis2.transport.http.AxisServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app>
接下来,我们需要一个简单的web service。让我们看一下BookService.java中的2个函数片段findBook和getBooks(译者注:其总的Book类需要自己另外实现,很简单,所以作者和译者都没有给出:)):
public Book[] getBooks() {
return new Book[]{onlyBook};
}
public Book findBook(String isbn) {
if (isbn.equals(onlyBook.getIsbn()))
return onlyBook;
return null;
}
接下来,我们需要为BookService写一个部署描述。正如你看到的,你可以用RPCMessageReceiver发布一个POJO,你也可以为web service本身的schema指定一个namespace。
<serviceGroup> <service name="BookService" targetNamespace="http://ws.apache.org/axis2/samples/book/"> <description>Book sample service</description> <schema schemaNamespace="http://ws.apache.org/axis2/samples/book/xsd/"/> <parameter name="ServiceClass" locked="false">samples.demo.BookService</parameter> <operation name="getBooks"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </operation> <operation name="findBook"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </operation> </service> </serviceGroup>
接下来我们需要准备aar吗?aar是为了热部署和service的隔离,这个是一个集成,所以接下来的“Exploded deployment option”意思是在WEB-INF中建立一个如下的目录结构:
\---WEB-INF
| web.xml
|
\---services
\---BookService
\---META-INF
services.xml
通常我们都会将BookService.aar发布到services目录中,这里,我们建立一个为BookService的目录并将部署描述文件(services.xml)放到META-INF目录下。恩,我们忘记什么了吗?是的,如何使用maven2的环境尽行简单的构建?一下是我们maven2的结构:
\---book
| pom.xml
| README
|
\---src
+---main
| | log4j.properties
| |
| \---samples
| \---demo
| Book.java
| BookService.java
| +---test
\---webapp
\---WEB-INF
| web.xml
|
\---services
\---BookService
\---META-INF
services.xml
所有需要的jars通过maven2都自动从Apache和Ibiblio下载了。因此,你甚至可以不下载Axis2就可以发布这个简单的工程。所有你需要处理的就是解压zip包如下:
$ mvn install war:war
然后将等到的war文件重命名为axis2.war,你可以将它放到任何servlet引擎。一旦你的servlet引擎启动,你可以通过如下service看到wsdl:
http://yourhost:port/axis2/services/BookService?wsdl