Develop with pleasure!

福岡でCloudとかBlockchainとか。

OAS10g R3でWebService開発

OASは10gR3からJSR-181のWeb Services Metadata for the Java Platformに対応している。そのため、Webサービスの定義をJavaコードの中にアノテーションとして記述できる。

ただし、OASの10gR3は完全にJAX-WSをサポートしている訳ではなく、ベースはあくまでJAX-RPCなので、公開するWebServiceは必ず、サービス・エンドポイント・インターフェースを必要とする。そのインターフェースは必ずjava.rmi.Remoteを継承し、そのメソッドは必ず、java.rmi.RemoteExceptionをthrowする必要がある。

こんな感じ。

package org.hoge;

import javax.jws.WebService;
import javax.jws.WebMethod;
import java.rmi.RemoteException;
import java.rmi.Remote;

@WebService(serviceName = "HogeWebService",
        targetNamespace = "http://webservice.hoge.org/HogeWebService")
public interface Hoge extends Remote {

    @WebMethod
    public void hoge() throws RemoteException;

}

で、実装クラスでは、@WebServiceアノテーションで、endpointInterfaceを指定する。

package org.hoge;

import javax.jws.WebService;

@WebService(endpointInterface = "org.hoge.Hoge")
public class HogeImpl implements Hoge {

    public void hoge() {
        System.out.println("hello hoge");
    }
}

この場合、サービス・エンドポイント・インターフェースをimplementsしているがendpointInterfaceで指定しているため、必ずしもimplementsする必要は無い。また、endpointInterfaceを使用しているため、他のJSR-181ベースのメタアノテーションは定義できない。

続いて、WebServiceとしてビルドする。OASでは、WebServicesAssemblerというツールを使用する。このツールを使用すると、application.xmlやwebservices.xmloracle-webservice.xmlを自動的に生成しパッケージングしたWebServiceデプロイ用のearアーカイブを生成してくれる。

target/classes直下にビルドしたクラスが存在する前提で、earアーカイブを作成するには、以下のようなbuild.xmlでantを行えば良い。

<?xml version="1.0" encoding="UTF-8"?>        
<project name="Hoge" default="build" basedir="."  xmlns:oracle="antlib:oracle">

    <!-- Task definitions for oc4j webservices tasks -->
    <target name="build">
        <echo message="Creating the ear start..."/>
        <oracle:assemble appName="hoge-webservice"
                  output="target"
                    input="./target/classes"
                  >
            <oracle:classpath location="target/classes"/>
            <oracle:porttype className="org.hoge.HogeImpl"
                interfaceName="org.hoge.Hoge"/>
        </oracle:assemble>
        <echo message="Creating the ear end."/>
    </target>

</project>

実行するとtargetフォルダ直下にhoge-webservice.earが作成されている。後は、このearをOASにデプロイすればOK。