2012-09-12 4 views
18

Sto cercando di sviluppare un servizio Web IBM JAX_WS utilizzando RSA 7.5 e il server Websphere 7. Dal momento che sono un principiante, quindi sto seguendo il primo approccio alla classe Java, cioè sto creando le classi Java prima e poi generando il file WSDL.IllegalAnnotationsException: Classe ha due proprietà con lo stesso nome

Quando provo a creare il file WSDL, io sono sempre un'eccezione:

java.security.PrivilegedActionException: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 conti di IllegalAnnotationsException classe ha due proprietà con lo stesso nome "PlanID"

la mia classe refered qui sembra qualcosa di simile:

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

Non ho alcuna idea come perché sta succedendo questa eccezione. Via ricerca di Google ho provato un paio di alternative per risolverlo, ma nessuno di loro ha lavorato per me :(

Nota:.

Questa è l'unica annotazione che sto usando tutta la mia area di lavoro non sono sicuro se questo dipende da altre annotazioni o no, ma ho provato con alcuni come @XMLElement (name = "Plan", required = true), @XMLType, ecc ma ogni volta che ottengo questa eccezione

Questa eccezione si verifica durante wsgen. (java.lang.reflect.InvocationTargetException)

EDIT

Fondamentalmente, quando si crea un wsdl dal metodo di servizio Java ed apre quello WSDL SOAP UI, allora otteniamo <!--Optional--> nella parte superiore di ogni elemento. Voglio rimuovere questo tag di opzione tag <!--Optional-->, quindi sto cercando l'approccio @XMLElement (required = true) in modo che quando apro WSDL nell'interfaccia utente SOAP <!--Optional--> non venga visualizzato per gli elementi obbligatori.

Secondo il mio concetto, @XMLElement (required = true) imposterà i minOccurs a 1 cioè maggiore di zero e quindi il commento facoltativo verrà rimosso da WSDL quando lo apro nell'interfaccia utente di SOAP. Ma purtroppo non funziona, quindi il mio concetto non è corretto. Dopo aver generato WSDL, posso vedere che il minOccurs è ancora 0.

Spiegare come è possibile rimuovere il tag facoltativo quando apro WSDL nell'interfaccia utente SOAP.

saluti,

risposta

37

Per impostazione predefinita JAXB (JSR-222) implementazioni elaborano i metodi di accesso pubblici e campi annotati.Se si annota un campo che si deve ottenere anche i metodi/set per otterrete questa eccezione:

Se avete intenzione di annotare i campi allora si dovrebbe specificare @XmlAccessorType(XmlAccessType.FIELD)

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

Oppure si può annotare la proprietà

public class MemberDetails{ 

    private String planId; 

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

Per ulteriori informazioni

+0

Grazie per la risposta. Supponendo il modo in cui hai suggerito, il WSDL viene creato senza alcuna eccezione wsgen. Ma il mio obiettivo non è raggiunto. Ho modificato il mio post sopra per descrivere quello che sto cercando di ottenere qualsiasi perché. Si prega di dare un'occhiata alla sezione modificata del 1 ° post e aiuto. – user182944

+1

ben spiegato. – lwpro2