我正在使用Axis來建模示例WebService。我現在正在做的是試圖瞭解哪些是自動wsdl和代碼生成的限制。axis wsdl generation
現在對於一些服務器端代碼:
這是樣本Web服務的骨架:
public class TestWebService {
public AbstractAttribute[] testCall(AbstractAttribute someAttribute) {
....
,我的數據類: 公共抽象類AbstractAttribute { 字符串名稱;
/*get/set for name*/
public abstract T getValue();
public abstract void setValue(T value);
}
public class IntAttribute extends AbstractAttribute<Integer> {
Integer value;
public Integer getValue(){ return value; }
public void setValue(Integer value){ this.value = value; }
}
public class StringAttribute extends AbstractAttribute<String> {
String value;
/* ok, you got the point, get/set for value field */
}
爲Axis2的這次日食的工具是很樂意來從這些來源WSDL,包括架構爲屬性類,它是:這裏
<xs:complexType name="AbstractAttribute">
<xs:sequence>
<xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="value" nillable="true" type="xs:anyType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="IntAttribute">
<xs:complexContent>
<xs:extension base="xsd:AbstractAttribute">
<xs:sequence>
<xs:element minOccurs="0" name="value" nillable="true" type="xs:int"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="StringAttribute">
<xs:complexContent>
<xs:extension base="xsd:AbstractAttribute">
<xs:sequence>
<xs:element minOccurs="0" name="value" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
現在,如果看到一些奇怪的事情,AbstractAttribute沒有** abstract =「true」**屬性,並定義了一個anyType值元素,它在IntAttribute和StirngAttribute中得到重寫。我甚至不知道這是否是一個合法的模式(順便說一句,我認爲它不合法)。
更多,如果我嘗試(總是使用Eclipse工具)將所生成的源不會編譯,因爲AbstractAttribute限定
Object localValue;
字段和Int /字符串屬性定義
從該WSDL生成客戶端int localValue;
和
String localValue;
..我試圖 「適應」 了源(顯然沒有很多希望),結果是服務器試圖實例化一個AbstractAttribute實例(拋出一個InstantiationException)。
所以我的問題是:有一種方法來模擬上面的數據模型,或者一般來說Web服務和XML模式不是用於這種特殊情況的最佳工具?