環境
- Windows 7 Professional SP1 64ビット
- Oracle OpenJDK 11.0.2 (2019/01/15)
- Apache Tomcat 9.0.20 (2019/05/13)
- Apache Axis2 1.7.9 (2018/11/16)
- Eclipse IDE for Enterprise Java Developers 2019-03 (2019/03/14)
1. EclipseでPOJO Web Serviceのプロジェクトを作成する
1-1. Javaプロジェクトを作成する
File > New > Other > Java > Java Project
Java Project ダイアログ (1) Project name: Axis2POJOWebService [チェックしない]Use default location Location: D:\home\gitrepository\Axis2POJOWebService JRE Use a project specific JRE: oracle-openjdk-11.0.2 Project layout Create separate folders for sources and class files Working sets [チェックしない]Add project to working sets

Java Project ダイアログ (2) [チェックしない]Allow output folders for source folders [チェックしない]Create module-info.java file Default output folder: Axis2POJOWebService/bin

1-2. Javaプロジェクトの設定を行う
'-source', '-target' オプションの代わりに '--release' フラグを使う。
Axis2POJOWebService > Properties > Java Compiler
JDK Compliance Compiler compliance level: 11 [チェックする]Use '--release' option [チェックする]Use default compliance settings

参考。
- Java Platform, Standard Edition Oracle JDK 9移行ガイド - 移行の準備 - アプリケーションのコンパイル(必要に応じて)
- Java SE 9 の javac で過去バージョンをターゲットにするときには --release オプションを使用すると良い
クラスパスにAxis2のlog4jを追加する。
Axis2POJOWebService > Properties > Java Build Path
Libraries Classpath Add External JARs... log4j-1.2.15.jar - D:\opt\apache-tomcat-9.0.20\webapps\axis2\WEB-INF\lib

2. POJO Web Serviceのプロジェクトにファイルを追加する
全体構成
Axis2POJOWebService |+bin | |+pojo | |+sample | |-POJOWebService.class | |+build | |+aar | | |-Axis2POJOWebService.aar | | | |+Axis2POJOWebService | | |+META-INF | | | |-services.xml | | | | | |+pojo | | |+sample | | |-POJOWebService.class | | | |+config | |-log4j.properties | |+config | |-log4j.properties | |-services.xml | |+src | |+pojo | |+sample | |-POJOWebService.java | |-build.xml
2-1. Javaクラスを追加する
プロジェクト内のファイルの場所。
Axis2POJOWebService |+src |+pojo |+sample |-POJOWebService.java
ファイルの内容。
package pojo.sample; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.ResolverStyle; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; public class POJOWebService { private static final Logger logger = LogManager.getLogger(POJOWebService.class); /** * 日付を進めて返す。 * * Date and Time Handling * https://docs.oracle.com/en/java/javase/11/intl/internationalization-overview.html#GUID-83B665AF-3F60-42B6-8461-CAE160FDB401 * The Date-Time Packages * https://docs.oracle.com/javase/tutorial/datetime/overview/packages.html * * @param date 日付 (uuuu-MM-dd) * @param day 進める日数 * @return 進めた日付 (uuuu-MM-dd) */ public String addDay(String date, long day) { logger.info("POJOWebService.addDay(" + date + ", " + day + ")"); LocalDate d = LocalDate.parse(date, DateTimeFormatter.ofPattern("uuuu-MM-dd").withResolverStyle(ResolverStyle.STRICT)); return d.plusDays(day).format(DateTimeFormatter.ofPattern("uuuu-MM-dd")); } }
2-2. services.xmlを追加する
プロジェクト内のファイルの場所。
Axis2POJOWebService |+config |-services.xml
ファイルの内容。
<service name="Axis2POJOWebService" scope="request"> <description>Axis2 POJO Web Service Sample</description> <messageReceivers> <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/> <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </messageReceivers> <parameter name="ServiceClass">pojo.sample.POJOWebService</parameter> </service>
メモ。
- services.xmlに複数のServiceClassを書くことはできない。
参考。
- Defining the Service: services.xml
- Welcome to Apache Axis2/Java > Table of Contents > Configuration Guide > Service Configuration (services.xml)
2-3. log4j.propertiesを追加する。
Axis2に付属のlog4j.propertiesをコピーして使う。Axis2配下のサービスに個別のlog4j.propertiesを置くことができないのでAxis2側で一括の設定になる。
参考。
Axis2に付属のlog4j.propertiesの場所。
D:\ |+opt |+apache-tomcat-9.0.20 |+webapps |+axis2 |+WEB-INF |+classes | |-log4j.properties | |+lib |-log4j-1.2.15.jar
プロジェクト内のファイルの場所。
Axis2POJOWebService |+config |-log4j.properties
ファイルの内容。
"# Add"に続く行を追加する。
# Set root category priority to INFO and its only appender to CONSOLE. log4j.rootCategory=INFO, CONSOLE #log4j.rootCategory=INFO, CONSOLE, LOGFILE # Set the enterprise logger priority to FATAL log4j.logger.org.apache.axis2.enterprise=FATAL log4j.logger.de.hunsicker.jalopy.io=FATAL log4j.logger.httpclient.wire.header=FATAL log4j.logger.org.apache.commons.httpclient=FATAL # Add pojo.sample=INFO # CONSOLE is set to be a ConsoleAppender using a PatternLayout. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=[%p] %m%n # LOGFILE is set to be a File appender using a PatternLayout. log4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.File=axis2.log log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
2-4. build.xmlを追加する。
プロジェクト内のファイルの場所。
Axis2POJOWebService |-build.xml
ファイルの内容。
<project default="AAR"> <property name="project.home" location="D:\home\gitrepository\Axis2POJOWebService"/> <property name="bin.home" value="${project.home}\bin"/> <property name="config.home" value="${project.home}\config"/> <property name="build.home" value="${project.home}\build"/> <property name="build.aar.home" value="${build.home}\aar"/> <property name="build.config.home" value="${build.home}\config"/> <property name="build.service.home" value="${build.home}\Axis2POJOWebService"/> <property name="build.service.metainf" value="${build.service.home}\META-INF"/> <available file="${build.home}" type="dir" property="build.home.exists"/> <!-- ==================================================================================================== --> <!-- ==================================================================================================== --> <target name="CLEAN" if="build.home.exists"> <delete includeemptydirs="true"> <fileset dir="${build.home}"/> </delete> </target> <target name="AAR" depends="CLEAN"> <mkdir dir="${build.home}"/> <mkdir dir="${build.aar.home}"/> <mkdir dir="${build.config.home}"/> <mkdir dir="${build.service.home}"/> <mkdir dir="${build.service.metainf}"/> <!-- ログ出力の設定をコピーする。 --> <copy todir="${build.config.home}"> <fileset file="${config.home}\log4j.properties"/> </copy> <!-- サービスの設定をコピーする。 --> <copy todir="${build.service.metainf}"> <fileset file="${config.home}\services.xml"/> </copy> <!-- クラスファイルをコピーする。 --> <copy todir="${build.service.home}"> <fileset dir="${bin.home}"/> </copy> <!-- Axis2 Archiveファイルを構築する。 --> <jar destfile="${build.aar.home}\Axis2POJOWebService.aar" basedir="${build.service.home}" /> </target> </project>
2-5. ビルドを行う。
コンパイルする。
Axis2POJOWebService > Project > Clean...
build.xmlを実行してAxis2 Archiveファイルを構築する。
Axis2POJOWebService > build.xml > Run As > Ant Build
構築したファイルが出力される場所。
Axis2POJOWebService |+build |+aar |-Axis2POJOWebService.aar
3. POJO Web ServiceをTomcatにデプロイする
全体構成
D:\ |+opt |+apache-tomcat-9.0.20 |+webapps |+axis2 |+WEB-INF |+classes | |-log4j.properties | |+conf | |-axis2.xml (管理画面のユーザーとパスワード,hotupdateの設定) | |+services |-Axis2POJOWebService.aar
3-1. log4jの設定ファイルを配置する
プロジェクト内の設定ファイルをデプロイ先のAxis2の配下にコピーする。
設定ファイルのコピー元。
Axis2POJOWebService |+build |+config |-log4j.properties
設定ファイルのコピー先。
D:\ |+opt |+apache-tomcat-9.0.20 |+webapps |+axis2 |+WEB-INF |+classes |-log4j.properties
3-2. Axis2のhotupdateの設定を有効にする
デフォルトではサービスの動的な更新は無効になっている。
設定ファイルの場所。
D:\ |+opt |+apache-tomcat-9.0.20 |+webapps |+axis2 |+WEB-INF |+conf |-axis2.xml
設定ファイルの内容。
<parameter name="hotupdate">true</parameter>
3-3. Axis2の管理画面からデプロイする場合
http://localhost:8081/axis2/ Administration Login (admin/axis2) Tools Upload Service ファイルを選択してUploadする。
自動的に再デプロイが行われる。Tomcatのコンソールにログが出力される。
[INFO] Undeploying Web service: Axis2POJOWebService [INFO] Deploying Web service: Axis2POJOWebService.aar - file:/D:/opt/apache-tomcat-9.0.20/webapps/axis2/WEB-INF/services/Axis2POJOWebService.aar
3-4. aarファイルを直接デプロイする場合
Axis2POJOWebService.aarファイルをaxis2のservicesフォルダに上書きコピーする。自動的に再デプロイが行われる。Tomcatのコンソールにログが出力される。
[INFO] Undeploying Web service: Axis2POJOWebService [INFO] Deploying Web service: Axis2POJOWebService.aar - file:/D:/opt/apache-tomcat-9.0.20/webapps/axis2/WEB-INF/services/Axis2POJOWebService.aar
4. Axis2POJOWebServiceをテストする
4-1. Javaプロジェクトを作成する
File > New > Other > Java > Java Project
- Create module-info.java fileのチェックをはずす。
- Java Build Path > Libraries > ClasspathにAdd External JARs...でAxis2のライブラリを全て追加する。一部だけ追加してコンパイルが通っても実行時にエラーになる。
- D:\opt\apache-tomcat-9.0.20\webapps\axis2\WEB-INF\lib\*.jar
- Java Compiler > JDK ComplianceのUse '--release' optionをチェックする。
4-2. テストコードを記述する。
package pojo.sample.test; import javax.xml.namespace.QName; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; public class POJOWebServiceTest { public static void main(String[] args) throws AxisFault { RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReference targetEPR = new EndpointReference("http://localhost:8081/axis2/services/Axis2POJOWebService"); options.setTo(targetEPR); QName opAddDay = new QName("http://sample.pojo", "addDay"); Object[] opAddDayArgs = new Object[] { "2019-06-29", 3 }; Class<?>[] returnTypes = new Class[] { String.class }; Object[] response = serviceClient.invokeBlocking(opAddDay, opAddDayArgs, returnTypes); String result = (String) response[0]; System.out.println(result); } }
参考。
4-3. 実行結果を確認する。
Axis2のサービス側のログ出力。
[INFO] POJOWebService.addDay(2019-06-29, 3)
テストコード側のログ出力。
2019-07-02