memo



JAX-RPC

[2003.10.28 : PRI]
■IF
package gunman;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface GunClockIF extends Remote {
public String getGunClock() throws RemoteException;
public void setClockSize(int clockSize) throws RemoteException;
}

■Impl
package gunman;

public class GunClockImpl implements GunClockIF {

private int clockSize = 20;

public String getGunClock(){

GunClockBean gunClockBean = new GunClockBean();
gunClockBean.setClockSize(this.clockSize);

return gunClockBean.getGunClock();
}

public void setClockSize(int clockSize){

this.clockSize = clockSize;

}
}

■config-interface.xml

http://java.sun.com/xml/ns/jax-rpc/ri/config”>
name=”GunClockService”
packageName=”gunman”
targetNamespace=”urn:GunClockTarget”
typeNamespace=”urn:GunClockType”
>





■jaxrpc-ri.xml


xmlns=”http://java.sun.com/xml/ns/jax-rpc/ri/dd”
version=”1.0”
targetNamespaceBase=”urn:GunClockTarget”
typeNamespaceBase=”urn:GunClockType”
urlPatternBase=”/ws”>

name=”GunClock”
displayName=”GunClock Service”
description=”A simple web service”
interface=”gunman.GunClockIF”
implementation=”gunman.GunClockImpl”
model=”/WEB-INF/model.gz”/>

endpointName=”GunClock”
urlPattern=”/GunClockWebService”/>



■web.xml


PUBLIC ”-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN”
http://java.sun.com/j2ee/dtds/web-app_2_3.dtd”>


JAX-RPC GunClock Web Application Sample
Sample Application for JAX-RPC using static stubs.

60




■wscompile
%JWSDP_HOME%\jaxrpc\bin\wscompile.bat -define -d WEB-INF/etc -nd WEB-INF/etc -classpath WEB-INF/classes config-interface.xml -model WEB-INF/model.gz

■war (一時的なもの:portable)
jar cvf GunClock-portable.war WEB-INF

WEB-INF/jaxrpc-ri.xml
WEB-INF/web.xml
WEB-INF/model.gz
WEB-INF/classes/

■wsdeploy (jax-rpcのwarを作る)
%JWSDP_HOME%\jaxrpc\bin\wsdeploy -o GunClock-jaxrpc.war GunClock-portable.war

■warをデプロイ
jax-rpc対応のtomcatにデプロイ
webappsにGunClock-jaxrpc.warをおくのみ。

■WSDL取得
http://localhost:8080/GunClock-jaxrpc/GunClockWebService?WSDL

***
【CLIENT(Static)】

■config-wsdl.xml

xmlns=”http://java.sun.com/xml/ns/jax-rpc/ri/config”>
http://localhost:8080/GunClock-jaxrpc/GunClockWebService?WSDL”
packageName=”staticstub”/>


■IF取得
%JWSDP_HOME%\jaxrpc\bin\wscompile -gen:client -d . -classpath . config-wsdl.xml

■Client.java
package gunman;
import staticstub.*;

import javax.xml.rpc.Stub;

public class GunClockClientStatic {

private static String endpointAddress = ”http://localhost:8080/GunClock-jaxrpc/GunClockWebService”;
private static int clockSize = 20;

public static void main(String[] args) {

if(args.length >= 1){ endpointAddress=args[0]; }
if(args.length >= 2){ clockSize = Integer.parseInt(args[1]); }

System.out.println(”Endpoint address = ” + endpointAddress);

try {
Stub stub = (Stub) (new GunClockService_Impl().getGunClockIFPort());
stub._setProperty(javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY,
endpointAddress);
GunClockIF gunClock = (GunClockIF)stub;

gunClock.setClockSize(clockSize);
System.out.println(gunClock.getGunClock());

} catch (Exception ex) {
ex.printStackTrace();
}

}
}



■compile
javac -classpath .;lib\jaxrpc-api.jar;lib\jaxrpc-impl.jar gunman\*.java

■run (jarファイルをいろいろかき集める)
set CLASSPATH=.
set CLASSPATH=%CLASSPATH%;lib\jaxrpc-api.jar
set CLASSPATH=%CLASSPATH%;lib\jaxrpc-impl.jar
set CLASSPATH=%CLASSPATH%;lib\jaxrpc-spi.jar
set CLASSPATH=%CLASSPATH%;lib\jax-qname.jar
set CLASSPATH=%CLASSPATH%;lib\activation.jar
set CLASSPATH=%CLASSPATH%;lib\mail.jar
set CLASSPATH=%CLASSPATH%;lib\saaj-impl.jar
set CLASSPATH=%CLASSPATH%;lib\saaj-api.jar
set CLASSPATH=%CLASSPATH%;lib\dom.jar
set CLASSPATH=%CLASSPATH%;lib\xercesImpl.jar

set WEBSERVICE=http://localhost:8080/GunClock-jaxrpc/GunClockWebService

java -classpath %CLASSPATH% gunman.GunClockClientStatic %WEBSERVICE%
java -classpath %CLASSPATH% gunman.GunClockClientStatic %WEBSERVICE% 30
java -classpath %CLASSPATH% gunman.GunClockClientStatic

***
【Dynamic】
スタブ生成せずに、ダイナミックに呼び出す方法もある。
GunClockIFだけは、前述の方法であらかじめ取得しておくこと。

■GunClockClientDynamic.java
package gunman;

import java.net.URL;
import javax.xml.rpc.Service;
import javax.xml.rpc.JAXRPCException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceFactory;
import staticstub.GunClockIF;

public class GunClockClientDynamic {

private static int clockSize = 15;

public static void main(String[] args) {
try {

String UrlString = args[0] + ”?WSDL”;
String nameSpaceUri = ”urn:GunClockTarget”;
String serviceName = ”GunClockService”;
String portName = ”GunClockIFPort”;

System.out.println(”UrlString = ” + UrlString);
URL gunClockWsdlUrl = new URL(UrlString);

ServiceFactory serviceFactory =
ServiceFactory.newInstance();

Service gunClockService =
serviceFactory.createService(gunClockWsdlUrl,
new QName(nameSpaceUri, serviceName));

GunClockIF myProxy =
(GunClockIF)
gunClockService.getPort(
new QName(nameSpaceUri, portName),
GunClockIF.class);

myProxy.setClockSize(clockSize);
System.out.println(myProxy.getGunClock());

} catch (Exception ex) {
ex.printStackTrace();
}
}
}

■compile
set CLASSPATH=.
set CLASSPATH=%CLASSPATH%;lib\jaxrpc-api.jar
set CLASSPATH=%CLASSPATH%;lib\jaxrpc-impl.jar
set CLASSPATH=%CLASSPATH%;lib\jaxrpc-spi.jar
set CLASSPATH=%CLASSPATH%;lib\jax-qname.jar
set CLASSPATH=%CLASSPATH%;lib\activation.jar
set CLASSPATH=%CLASSPATH%;lib\mail.jar
set CLASSPATH=%CLASSPATH%;lib\saaj-impl.jar
set CLASSPATH=%CLASSPATH%;lib\saaj-api.jar
set CLASSPATH=%CLASSPATH%;lib\dom.jar
set CLASSPATH=%CLASSPATH%;lib\xercesImpl.jar

javac -classpath %CLASSPATH% gunman\GunClockClientDynamic.java

■run
set CLASSPATH=.
set CLASSPATH=%CLASSPATH%;lib\jaxrpc-api.jar
set CLASSPATH=%CLASSPATH%;lib\jaxrpc-impl.jar
set CLASSPATH=%CLASSPATH%;lib\jaxrpc-spi.jar
set CLASSPATH=%CLASSPATH%;lib\jax-qname.jar
set CLASSPATH=%CLASSPATH%;lib\activation.jar
set CLASSPATH=%CLASSPATH%;lib\mail.jar
set CLASSPATH=%CLASSPATH%;lib\saaj-impl.jar
set CLASSPATH=%CLASSPATH%;lib\saaj-api.jar
set CLASSPATH=%CLASSPATH%;lib\dom.jar
set CLASSPATH=%CLASSPATH%;lib\xercesImpl.jar

set WEBSERVICE=http://localhost:8080/GunClock-jaxrpc/GunClockWebService

java -classpath %CLASSPATH% gunman.GunClockClientStatic %WEBSERVICE%
■ Links