概要
Axis2 1.6では、Enumをサポートされていないらしい。(以下を参照)https://issues.apache.org/jira/browse/AXIS2-3967
Axis2 1.7.0 からサポートらしいが、2013/10/17現在では、まだリリースされていない。http://shameerarathnayaka.blogspot.jp/2011/09/introducing-enum-support-with-apache.html
では、どうしようか?
解決案1
* リリース前の「Axis2 trunk」を落として、使用するhttp://shameerarathnayaka.blogspot.jp/search/label/Axis2
必要なもの
* SVN (http://svn.apache.org/repos/asf/axis/axis2/java/core/trunk/ でソースを取得する) * Maven なお、上記の設定は、下記の関連記事を参照のこと
関連記事
* Mavanhttp://blogs.yahoo.co.jp/dk521123/6775203.html
結果
* Mavan を設定してやってみたが、エラーが出る...
参考文献
http://axis.apache.org/axis2/java/core/svn.htmlhttp://shameerarathnayaka.blogspot.jp/2011/09/apache-axis2-server-developer-guide-to.html
解決案2
* Axis1 を使用する
ダウンロード先
* 例えば、Axis1.4の場合、「axis-1_4.zip」をダウンロードし、解凍するhttp://axis.apache.org/axis/java/releases.html
生成手順
[1] コマンドプロンプトを開き、「axis-1_4\lib」まで移動する 例えば、Axis1.4で、解凍先が、「C:\pg」の場合 ------ cd C:\pg\axis-1_4\lib ------ [2] 「java org.apache.axis.wsdl.WSDL2Java」を使用して、WSDL2ファイルから、Javaファイルを生成する ------ java -cp "C:\pg\axis-1_4\lib\*" org.apache.axis.wsdl.WSDL2Java -o out C:\pg\axis-1_4\lib\sample.wsdl ------ ※WSDL2Javaについては、以下を参照のこと ※エラーについては、以下【トラブルシューティング】を参照のことhttp://axis.apache.org/axis/ja/java/reference.html#WSDL2JavaReference
出力例
「C:\pg\axis-1_4\lib\out\com\xxxx\samples\sampleEnumTypes」配下に「Color.java」ができる
Color.java
/** * Color.java * * このファイルはWSDLから自動生成されました / [en]-(This file was auto-generated from WSDL) * Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java生成器によって / [en]-(by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.) */ package com.xxxx.samples.sampleEnumTypes; public class Color implements java.io.Serializable { private java.lang.String _value_; private static java.util.HashMap _table_ = new java.util.HashMap(); // コンストラクタ / [en]-(Constructor) protected Color(java.lang.String value) { _value_ = value; _table_.put(_value_,this); } public static final java.lang.String _Black = "Black"; public static final java.lang.String _White = "White"; public static final Color Black = new Color(_Black); public static final Color White = new Color(_White); public java.lang.String getValue() { return _value_;} public static Color fromValue(java.lang.String value) throws java.lang.IllegalArgumentException { Color enumeration = (Color) _table_.get(value); if (enumeration==null) throw new java.lang.IllegalArgumentException(); return enumeration; } public static Color fromString(java.lang.String value) throws java.lang.IllegalArgumentException { return fromValue(value); } public boolean equals(java.lang.Object obj) {return (obj == this);} public int hashCode() { return toString().hashCode();} public java.lang.String toString() { return _value_;} public java.lang.Object readResolve() throws java.io.ObjectStreamException { return fromValue(_value_);} public static org.apache.axis.encoding.Serializer getSerializer( java.lang.String mechType, java.lang.Class _javaType, javax.xml.namespace.QName _xmlType) { return new org.apache.axis.encoding.ser.EnumSerializer( _javaType, _xmlType); } public static org.apache.axis.encoding.Deserializer getDeserializer( java.lang.String mechType, java.lang.Class _javaType, javax.xml.namespace.QName _xmlType) { return new org.apache.axis.encoding.ser.EnumDeserializer( _javaType, _xmlType); } // メタデータ型 / [en]-(Type metadata) private static org.apache.axis.description.TypeDesc typeDesc = new org.apache.axis.description.TypeDesc(Color.class); static { typeDesc.setXmlType(new javax.xml.namespace.QName("http://xxxx.com/samples/sampleEnumTypes", "Color")); } /** * メタデータオブジェクトの型を返却 / [en]-(Return type metadata object) */ public static org.apache.axis.description.TypeDesc getTypeDesc() { return typeDesc; } }
感想
* enum ではなく、class として出力されるのが。。。 (これなら、Axis2でもできるかも)
サンプル
WSDLファイル
sample.wsdl
<definitions name="Sample" targetNamespace="http://example.com/sample.wsdl" xmlns:tns="http://example.com/sample.wsdl" xmlns:xsd="http://example.com/sample.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="">http://schemas.xmlsoap.org/wsdl/"> <schema targetNamespace="http://xxxx.com/samples/sampleEnumTypes" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0"> <simpleType name="Color"> <annotation> <appinfo> <jaxb:typesafeEnumClass /> </appinfo> </annotation> <restriction base="string"> <enumeration value="Black" /> <enumeration value="White" /> </restriction> </simpleType> </schema> </definitions>
トラブルシューティング
生成手順[2]でエラーが発生する
生成手順[2]を行った際に、以下のエラーが表示されてしまう。
エラー内容
Error: Could not find or load main class axis.jar
原因
* WinOSが64BitでJava(JDK)も、64Bitであったため
解決策
* Java(JDK)を、32Bit版をインストールして試す