2012-09-12 51 views
18

我正在嘗試使用RSA 7.5和Websphere 7服務器開發IBM JAX_WS Web服務。由於我是初學者,因此我遵循Java類的第一種方法,即先創建Java類,然後生成WSDL文件。IllegalAnnotationsException:類有兩個同名的屬性

當我嘗試創建WSDL文件,我得到一個例外:

java.security.PrivilegedActionException:com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:1個IllegalAnnotationsException計數 類具有相同的名稱「planId」的兩個屬性

我這裏refered類看起來是這樣的:

public class MemberDetails{ 
    @XMLElement(required=true) 
    private String planId; 
    //public getters and setters for the planId; 
} 

我沒有任何想法像爲什麼會發生這種異常。通過谷歌搜索我嘗試了一些替代品來解決它,但他們沒有爲我工作:(

注:

這是我使用的整個我的工作區唯一的註解,我不知道如果這但是我嘗試了一些例如@XMLElement(name =「Plan」,required = true),@XMLType等,但是每次我得到這個異常時

這個異常發生在wsgen期間(java.lang.reflect.InvocationTargetException

編輯

基本上,當我們創建Java服務方法的WSDL和打開SOAP的用戶界面,WSDL,那麼,我們在每一個環節都得到最高<!--Optional-->。我想刪除此選項標記<!--Optional-->標記,因此我正在嘗試@XMLElement(required = true)方法,以便當我在SOAP UI中打開WSDL時<!--Optional-->不會顯示爲強制元素。

根據我的理念,@XMLElement(required = true)會將minOccurs設置爲1,即大於零,因此當我在SOAP UI中打開它時,可選註釋將從WSDL中刪除。但不幸的是它不工作,因此我的概念是不正確的。 WSDL生成後,我可以看到minOccurs仍然是0.

請解釋當我在SOAP UI中打開WSDL時如何刪除可選標記。

問候,

回答

37

默認情況下JAXB (JSR-222)實施過程中的公衆訪問方法和註釋字段。如果您註釋字段,你也有get/set方法對您會得到這個異常:

如果你要註釋字段,那麼你應該指定@XmlAccessorType(XmlAccessType.FIELD)

@XmlAccessorType(XmlAccessType.FIELD) 
public class MemberDetails{ 
    @XMLElement(required=true) 
    private String planId; 
    //public getters and setters for the planId; 
} 

或者你可以註釋屬性

public class MemberDetails{ 

    private String planId; 

    @XMLElement(required=true) 
    public String getPlanId() { 
     return planId; 
    } 
} 

更多信息

+0

感謝您的迴應。按照你的建議,WSDL的創建沒有任何wsgen異常。但是我的目標沒有實現。我已經編輯了我的上述帖子來描述我想要達到的目的。請看第一篇文章的編輯部分和幫助。 – user182944

+1

很好地解釋了。 – lwpro2

相關問題