Web 服务(Web Service)
7.1 Web Service 的创建
我们将创建一个基于
JSR-181 规范的 Web
Service及其对应的客户端。
开发一个 JSR-181
POJO Endpoint的 Web Service应遵守下面几个步骤:
1>
建立一个POJO
endpoint
2>
把
endpoint 定义成一个 servlet
3>
把 endpoint 打包成一个 Web 应用(war 文件)
△建立一个POJO endpoint
HelloWorldService.java
package com.foshanshop.web.ws;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(targetNamespace="http://ws.foshanshop.com",
name = "HelloWorld",
serviceName = "HelloWorldService")
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
public class HelloWorldService{
@WebMethod(operationName="SayHello")
public String SayHello(@WebParam(name="name") String
name) {
return name +"说:你好!世界,这是我的第一个web service哦.";
}
}
△
把 endpoint 定义成一个 servlet
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>HelloWorldService</servlet-name>
<servlet-class>com.foshanshop.web.ws.HelloWorldService</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldService</servlet-name>
<url-pattern>/HelloWorldService</url-pattern>
</servlet-mapping>
</web-app>
△
把 endpoint 打包成一个 Web 应用(war 文件)
build.xml
<?xml version="1.0"?>
<!-- ======================================================================= -->
<!-- JWS build file
-->
<!-- ======================================================================= -->
<project name="JWS" default="war" basedir="..">
<property environment="env" />
<property name="app.dir" value="${basedir}/JWS" />
<property name="src.dir" value="${app.dir}/src" />
<property name="jboss.home" value="${env.JBOSS_HOME}" />
<property name="jboss.server.config" value="default" />
<property name="build.dir" value="${app.dir}/build" />
<property name="build.classes.dir" value="${build.dir}/classes" />
<!-- Build classpath -->
<path id="build.classpath">
<fileset dir="${jboss.home}/client">
<include name="**/*.jar" />
</fileset>
<pathelement location="${build.classes.dir}" />
</path>
<!-- =================================================================== -->
<!-- Prepares the build directory
-->
<!-- =================================================================== -->
<target name="prepare" depends="clean">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes.dir}" />
</target>
<!-- =================================================================== -->
<!-- Compiles the source code
-->
<!-- =================================================================== -->
<target name="compile" depends="prepare" description="编绎web服务">
<javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on" optimize="off" includes="**">
<classpath refid="build.classpath" />
</javac>
</target>
<target name="war" depends="compile" description="创建WS发布包">
<war warfile="${app.dir}/Services.war" webxml="${app.dir}/WEB-INF/web.xml">
<classes dir="${build.classes.dir}">
<include name="com/**" />
</classes>
</war>
</target>
<target name="deploy" depends="war">
<copy file="${app.dir}/Services.war" todir="${jboss.home}/server/${jboss.server.config}/deploy" />
</target>
<!-- =================================================================== -->
<!-- Cleans up generated stuff -->
<!-- =================================================================== -->
<target name="clean">
<delete dir="${build.dir}" />
<delete file="${jboss.home}/server/${jboss.server.config}/deploy/Services.war" />
</target>
</project>
7.2. 用 java 语言调用 Web
Service
1>IDE 提供了生成 Web Service客户端代码的功能如下:
Eclipse →“新建”
→“其他” → Web Services →“Web Service Client“ →“下一步” →service definition:“http://localhost:8080/Services/HelloWorldService?wsdl” →“下一步” →完成。
2>通过生成的代码调用Web Services,
我们新建一个名为
TestHelloWorld的 java 文件
TestHelloWorld.java
package com.foshanshop.AppTest;
import com.foshanshop.ws.client.HelloWorld;
import com.foshanshop.ws.client.HelloWorldService;
public class TestHelloWorld {
public static void main(String[] args) {
try {
HelloWorldService
service = new HelloWorldService();
HelloWorld
helloWorld = service.getHelloWorldPort();//从服务中取得入口端点
String
result = helloWorld.sayHello("张朗");
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
直接运行该文件就可以看到调用结果。
完。
-----------------------------------------------------------------
版本问题:
目前jbossws-
该问题,估计这个问题在后续版本中将得到修正。