2012-09-12 20 views
18

Estoy intentando desarrollar un servicio web IBM JAX_WS utilizando el servidor RSA 7.5 y Websphere 7. Como soy un principiante, de ahí estoy siguiendo el primer enfoque de la clase Java, es decir, estoy creando las clases Java primero y luego generando el archivo WSDL.IllegalAnnotationsException: Class tiene dos propiedades del mismo nombre

Cuando trato de crear el archivo WSDL, me estoy haciendo una excepción:

java.security.PrivilegedActionException: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 cuenta de IllegalAnnotationsException clase tiene dos propiedades del mismo nombre "PLANID"

Mi clase referido aquí se ve algo como esto:

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

no tengo ni idea como por qué está ocurriendo esta excepción. A través de la búsqueda de Google Probé algunas alternativas para resolverlo, pero ninguno de ellos trabajó para mí :(

Nota:.

Ésta es la única anotación que estoy usando lo largo de mi espacio de trabajo que no estoy seguro si esto depende de algunas otras anotaciones o no. Pero lo intenté con algunas como @XMLElement (name = "Plan", required = true), @XMLType, etc. pero cada vez que obtengo esta excepción.

Esta excepción está ocurriendo durante wsgen. (java.lang.reflect.InvocationTargetException)

EDITAR

Básicamente, cuando creamos un WSDL del método de servicio de Java y abierto que en la interfaz de usuario WSDL SOAP, entonces tenemos <!--Optional--> en la parte superior de cada elemento. Quiero eliminar esta etiqueta de opción etiqueta <!--Optional-->, por lo tanto, estoy intentando el enfoque @XMLElement (obligatorio = verdadero) para que cuando abra el WSDL en la interfaz de usuario SOAP <!--Optional--> no aparezca para los elementos obligatorios.

De acuerdo con mi concepto, @XMLElement (obligatorio = verdadero) establecerá el minOccurs en 1, es decir, mayor que cero y, por lo tanto, el comentario opcional se eliminará de WSDL cuando lo abra en SOAP UI. Pero desafortunadamente no funciona, de ahí que mi concepto sea incorrecto. Después de que se genera el WSDL, puedo ver que el minOccurs sigue siendo 0.

Explique cómo puedo eliminar la etiqueta opcional cuando abro el WSDL en la interfaz de usuario de SOAP.

Saludos,

Respuesta

37

Por defecto JAXB (JSR-222) implementaciones procesar métodos de acceso públicos y campos anotados.Si anotar un campo que también tiene conseguir métodos/set para obtendrá esta excepción:

Si se va a anotar los campos a continuación, se debe especificar @XmlAccessorType(XmlAccessType.FIELD)

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

O puede anotar la propiedad

public class MemberDetails{ 

    private String planId; 

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

Para más información

+0

Gracias por la respuesta. Siguiendo el camino sugerido, el WSDL se crea sin ninguna excepción wsgen. Pero mi objetivo no se logra. He editado mi publicación anterior para describir lo que intento lograr por qué. Por favor, eche un vistazo a la sección editada de la primera publicación y ayuda. – user182944

+1

bien explicado. – lwpro2

Cuestiones relacionadas