A implementar en el Servidor GlassFish ose (Open Source Edition) 3.1.1 (versión 12):

Causada por: java.de seguridad.PrivilegedActionException:
com.sol.xml.se unen.v2.en tiempo de ejecución.IllegalAnnotationsException: 1 cuenta de
IllegalAnnotationExceptions no Hay ObjectFactory con un
@XmlElementDecl para el elemento
{http://www.w3.org/2004/08/xop/include}Incluir.
este problema está relacionado con la siguiente ubicación:
en la protegida de java.util.Lista de ru.gosuslugi.smev.rev120315.ReferenceType.contenido
en el ru.gosuslugi.smev.rev120315.ReferenceType
en public javax.xml.se unen.JAXBElement ru.gosuslugi.smev.rev120315.ObjectFactory.createReference(ru.gosuslugi.smev.rev120315.ReferenceType)
en el ru.gosuslugi.smev.rev120315.ObjectFactory
en la protegida de java.util.Lista de ru.gosuslugi.smev.rev120315.AppDataType.cualquier
en el ru.gosuslugi.smev.rev120315.AppDataType
en la protegida ru.gosuslugi.smev.rev120315.AppDataType ru.gosuslugi.smev.rev120315.MessageDataType.appData
en el ru.gosuslugi.smev.rev120315.MessageDataType
en la protegida ru.gosuslugi.smev.rev120315.MessageDataType
ru.gosuslugi.smev.rev120315.BaseMessageType.messageData
en el ru.gosuslugi.smev.rev120315.BaseMessageType

Fuentes:

src/org/w3/_2004/_08/xop/include/Include.java

//
//This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
//See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
//Any modifications to this file will be lost upon recompilation of the source schema. 
//Generated on: 2012.08.22 at 04:13:30 PM MSK 
//
package org.w3._2004._08.xop.include;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAnyAttribute;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.namespace.QName;
/**
* <p>Java class for Include complex type.
* 
* <p>The following schema fragment specifies the expected content contained within this class.
* 
* <pre>
* &lt;complexType name="Include">
*   &lt;complexContent>
*     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
*       &lt;sequence>
*         &lt;any namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
*       &lt;/sequence>
*       &lt;attribute name="href" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
*       &lt;anyAttribute namespace='##other'/>
*     &lt;/restriction>
*   &lt;/complexContent>
* &lt;/complexType>
* </pre>
* 
* 
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Include", propOrder = {
"any"
})
public class Include {
@XmlAnyElement(lax = true)
protected List<Object> any;
@XmlAttribute(name = "href", required = true)
@XmlSchemaType(name = "anyURI")
protected String href;
@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap<QName, String>();
/**
* Gets the value of the any property.
* 
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the any property.
* 
* <p>
* For example, to add a new item, do as follows:
* <pre>
*    getAny().add(newItem);
* </pre>
* 
* 
* <p>
* Objects of the following type(s) are allowed in the list
* {@link Object }
* 
* 
*/
public List<Object> getAny() {
if (any == null) {
any = new ArrayList<Object>();
}
return this.any;
}
/**
* Gets the value of the href property.
* 
* @return
*     possible object is
*     {@link String }
*     
*/
public String getHref() {
return href;
}
/**
* Sets the value of the href property.
* 
* @param value
*     allowed object is
*     {@link String }
*     
*/
public void setHref(String value) {
this.href = value;
}
/**
* Gets a map that contains attributes that aren't bound to any typed property on this class.
* 
* <p>
* the map is keyed by the name of the attribute and 
* the value is the string value of the attribute.
* 
* the map returned by this method is live, and you can add new attribute
* by updating the map directly. Because of this design, there's no setter.
* 
* 
* @return
*     always non-null
*/
public Map<QName, String> getOtherAttributes() {
return otherAttributes;
}
}

org/w3/_2004/_08/xop/include/ObjectFactory.java

//
//This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
//See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
//Any modifications to this file will be lost upon recompilation of the source schema. 
//Generated on: 2012.08.22 at 04:13:30 PM MSK 
//
package org.w3._2004._08.xop.include;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;
/**
* This object contains factory methods for each 
* Java content interface and Java element interface 
* generated in the org.w3._2004._08.xop.include package. 
* <p>An ObjectFactory allows you to programatically 
* construct new instances of the Java representation 
* for XML content. The Java representation of XML 
* content can consist of schema derived interfaces 
* and classes representing the binding of schema 
* type definitions, element declarations and model 
* groups.  Factory methods for each of these are 
* provided in this class.
* 
*/
@XmlRegistry
public class ObjectFactory {
private final static QName _Include_QNAME = new QName("http://www.w3.org/2004/08/xop/include", "Include");
/**
* Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.w3._2004._08.xop.include
* 
*/
public ObjectFactory() {
}
/**
* Create an instance of {@link Include }
* 
*/
public Include createInclude() {
return new Include();
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link Include }{@code >}}
* 
*/
@XmlElementDecl(namespace = "http://www.w3.org/2004/08/xop/include", name = "Include")
public JAXBElement<Include> createInclude(Include value) {
return new JAXBElement<Include>(_Include_QNAME, Include.class, null, value);
}
}
  • Cómo son la creación de su JAXBContext?

3 Comentarios

  1. 1

    Cuando un JAXB modelo se genera a partir de un esquema XML, yo siempre recomiendo la creación de la JAXBContext utilizando el nombre del paquete del modelo generado.

    JAXBContext jc = JAXBContext.newInstance("org.w3._2004._08.xop.include");

    No especifica qué tipo de aplicación se implementa en GlassFish, pero si es un JAX-RS/Jersey de aplicación, recomendaría el uso de un ContextResolver. Este es un mecanismo estándar que proporciona un mayor control sobre cómo su JAXBContext es creado. A continuación es un ejemplo.

    import java.util.*;
    import javax.ws.rs.Produces;
    import javax.ws.rs.ext.*;
    import javax.xml.bind.*;
    import org.eclipse.persistence.jaxb.JAXBContextFactory;
    @Provider
    @Produces({"application/xml", "application/json"})
    public class SampleContextResolver implements ContextResolver<JAXBContext> {
    private JAXBContext jc;
    public SampleContextResolver() {
    try {
    jc = JAXBContext.newInstance("org.w3._2004._08.xop.include");
    } catch(JAXBException e) {
    throw new RuntimeException(e);
    }
    }
    public JAXBContext getContext(Class<?> clazz) {
    if(clazz.getPackage().getName().equals("org.w3._2004._08.xop.include")) {
    return jc;
    }
    return null;
    }
    }
    • Gracias por el ejemplo, pero puedo hacer JABÓN de servicio. Cómo agregado JAXBContext a mi servicio de JABÓN?
    • JABÓN con jax-ws.
    • Estás interactuando con el servicio de JABÓN directamente, o utiliza JAXB como el de la capa de enlace predeterminada a través de JAX-WS?
    • No sé 🙂 me tomé el ejemplo jaxws-ri/muestras/anotaciones y tratar de modificar para que se ajuste a mis necesidades.
    • Si usted puede publicar el servicio web que haría las cosas más fáciles de resolver.
    • +1 para el uso del paquete en lugar de clase!

  2. 1

    Me enfrenté a exactamente el mismo problema hace 6 meses y honestamente no recuerdo cómo fue resuelto (probablemente no necesitamos algunos funcionalidad, de modo que nos ponga a un lado). Pero hoy una vez más de nuestra hermosa stacktrace maldita con el mensaje (literalmente, como el tuyo)

    Pero esta vez yo era capaz de lidiar con ella.

    No hay nada de malo con Incluir la clase. Pero de alguna manera, y esa es mi suposición, no se carga correctamente para jaxb, o no en el momento en que la necesitamos, o lo que sea …

    Lo que yo estaba tratando de hacer en mi código es validar una carga útil del mensaje soap.

        JAXBContext jaxbContext = JAXBContext.newInstance(UnifoTransferMsg.class) ;
    SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = schemaFactory.newSchema(new File("UnifoTransferMsg.xsd"));
    Marshaller marshaller = jaxbContext.createMarshaller();
    marshaller.setSchema(schema);
    marshaller.marshal(inputmsg, System.out);

    Me sobra para los valores codificados, es sólo para la depuración. No obstante, la primera línea es donde se produce la excepción porque Jaxb de alguna manera sabe nada acerca de Incluir o utiliza la clase equivocada. Para solucionarlo lo que uno necesita para cargar varias clases en la misma llamada.

    Así que la mejor solución para mí fue

    JAXBContext.newInstance(Include.class, UnifoTransferMsg.class);

    Espero que ayude y tal vez un día voy a ampliar más sobre la verdadera causa del problema.

  3. 0

    Usted puede tratar de poner @XmlRoolElement anotación en generar Incluyen la clase.

    • Soy añadido XmlRoolElement a Incluir.java.No funciona
    • Esto parece que el JABÓN contador de referencias no es capaz de encontrar la ObjectFactoy. Me pasa cuando se especifique equivocado paquete contador de referencias (por ejemplo, Jaxb). Así que, ¿cómo está el consumo de este servicio web? Me refiero a que a través de la Primavera WebServiceTemplate o algo más? ¿Cuáles son los marsheller/unmarshaller utilizado?
    • Debería ser en realidad @XmlRootElement

Dejar respuesta

Please enter your comment!
Please enter your name here