【JAX-WS入門シリーズ】第07章_Tomcatと統合


サービスはウェブプロジェクトで、クライアントはJava Projectです。
まずはサービスのSEIです。
package com.jadyer.service;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService(targetNamespace="http://blog.csdn.net/jadyer")
public interface HelloService {
	@WebResult(name="sayHelloResult")
	public String sayHello(@WebParam(name="name")String name);
}
以下はサービスのSIBです。
package com.jadyer.service;

import javax.jws.WebService;

@WebService(endpointInterface="com.jadyer.service.HelloService", targetNamespace="http://blog.csdn.net/jadyer")
public class HelloServiceImpl implements HelloService {
	@Override
	public String sayHello(String name) {
		System.out.println("Receive the name=[" + name + "]");
		if(null==name){
			return "Hello,World";
		}else{
			return "Hello," + name;
		}
	}
}
以下は集積に必要な//WebRoot/WEB-INF/sun-jaxws.xmlです。
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
	<!--           name:   , web.xml   Servlet      -->
	<!-- implementation:    WebServices       -->
	<!--    url-pattern:        -->
	<endpoint name="myJaxWsTomcatDemo"
			  implementation="com.jadyer.service.HelloServiceImpl"
			  url-pattern="/myHello"/>
</endpoints>

<!--
 JAX-WS   WebServices      Tomcat
    
1) WEB-INF   sun-jaxws.xml
2)  JAX-RI 
3)  web.xml
4)  tomcat
    
JAX-RI           WebService    ,         ,JAX-RI       
JAX-RI    https://jax-ws.java.net,         JAXWS2.2.7-20120813.zip
        
JAX-RI JAX-WS     ,             , GlassFish      ,GlassFish      JavaEE     
JAX-RI            (                ),        Metro    
-->
最後は/WebRoot/WEB-INF/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">
	<listener>
		<!--    :  jaxws-ri      -->
		<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
	</listener>
	<servlet>
		<!--      sun-jaxws.xml    endpointName   -->
		<servlet-name>myJaxWsTomcatDemo</servlet-name>
		<!--    :  jaxws-ri  Servlet -->
		<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>myJaxWsTomcatDemo</servlet-name>
		<!--      sun-jaxws.xml    url-pattern   -->
		<!-- Tomcat           http://127.0.0.1:8088/webPath/myHello?wsdl -->
		<url-pattern>/myHello</url-pattern>
	</servlet-mapping>
</web-app>
ここで、サービスエンドコードの例が終わりました。以下はクライアントコードです。
クライアントは一つのサービス端末を呼び出す例のClienntApp.javaしかありません。
注意:具体的なクライアントコードは、wsmeportによって生成されます。詳細は以下の通りです。http://blog.csdn.net/jadyer/article/details/8692108
package com.jadyer.client;

import java.io.IOException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.soap.SOAPException;

import net.csdn.blog.jadyer.HelloService;
import net.csdn.blog.jadyer.HelloServiceImplService;

/**
 * wsimport -d D:/Download/ -keep -verbose http://127.0.0.1:8088/jaxws_tomcat/myHello?wsdl
 * @create May 31, 2013 7:49:51 PM
 * @author   <http://blog.csdn.net/jadyer>
 */
public class ClientApp {
	public static void main(String[] args) throws SOAPException, IOException {
		//           8088,    Eclipse   TCP/IP Monitor,     8088  TCP/IP Monitor       
		String wsdlLocation = "http://127.0.0.1:8088/jaxws_tomcat/myHello?wsdl";
		//  wsdl      <wsdl:definitions targetNamespace=""/>  
		String nameSpace = "http://blog.csdn.net/jadyer";
		//  wsdl      <wsdl:service name="">  
		String serviceName = "HelloServiceImplService";
		HelloServiceImplService helloServiceImpl = new HelloServiceImplService(new URL(wsdlLocation), new QName(nameSpace, serviceName));
		HelloService hello = helloServiceImpl.getHelloServiceImplPort();
		System.out.println(hello.sayHello("  "));
	}
}