java - parse - Obtención de la excepción JAXB como "Dos clases tienen el mismo nombre de tipo XML..."
xml to java object jaxb online (1)
Nota: Soy el líder de EclipseLink JAXB (MOXy) y un miembro del grupo de expertos JAXB (JSR-222) .
Si puedes anotar la clase
Si puede modificar la clase, simplemente puede agregar una anotación @XmlType
a una de las clases de City
para cambiar el nombre del tipo de esquema XML correspondiente.
package **com.common**;
@XmlType(name="city2")
public class City {
private String pinCode;
}
Si no puede anotar la clase
MOXy ofrece una extensión de documento de mapeo externa que se puede usar para aplicar metadatos JAXB a una clase que no se puede cambiar.
<?xml version="1.0"?>
<xml-bindings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
package-name="**com.common**">
<java-types>
<java-type name="City">
<xml-type name="city2"/>
</java-type>
</java-types>
</xml-bindings>
Para más información
ACTUALIZAR
1) necesitamos escribir un archivo de enlace para una sola clase de la Ciudad o se requiere que escriba las otras 2 clases (me refiero a Dirección y otra Ciudad)?
El documento de mapeo externo de MOXy puede usarse para aumentar o reemplazar completamente (ver: http://blog.bdoughan.com/2011/09/mapping-objects-to-multiple-xml-schemas.html ) los metadatos en una clase. Si el único cambio que debe hacer es en una de las clases de la City
, entonces no necesita incluir las otras.
2) En el archivo de enlace, usted había considerado solo el nombre de la clase, ¿no es necesario que tome las propiedades definidas en la Ciudad (me refiero a pinCode)?
MOXy como cualquier implementación de JAXB aplica una asignación predeterminada a todas las clases. Solo necesita proporcionar metadatos para los lugares donde desea que el comportamiento de mapeo difiera del predeterminado.
3) ¿Necesitamos optar por MOXy para esto?
JAXB no tiene un documento de mapeo externo estándar. La que he descrito es una extensión MOXy. Si está utilizando JAXB RI, puede verificar la integración con Annox.
Obteniendo la excepción JAXB como "Dos clases tienen el mismo nombre de tipo XML ...",
Aquí están los detalles de la excepción :
Excepción en el hilo "main" com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 conteos de IllegalAnnotationExceptions Dos clases tienen el mismo nombre de tipo XML "ciudad". Use @ XmlType.name y @ XmlType.namespace para asignarles diferentes nombres. este problema está relacionado con la siguiente ubicación: en com.model.City en público com.model.City com.model.Address.getCurrentCity () en com.model.Address este problema está relacionado con la siguiente ubicación: en com.common .City en public com.common.City com.model.Address.getPreviousCity () at com.model.Address
en com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException $ Builder.check (Fuente desconocida) en com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet (Fuente desconocida) en com.sun .xml.internal.bind.v2.runtime.JAXBContextImpl. (Origen desconocido) en com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl $ JAXBContextBuilder.build (Fuente desconocida) en com.sun.xml.internal. bind.v2.ContextFactory.createContext (Fuente desconocida) en com.sun.xml.internal.bind.v2.ContextFactory.createContext (Fuente desconocida) en sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMetEpcation. invoke (Unknown Source) en sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) en java.lang.reflect.Method.invoke (Unknown Source) en javax.xml.bind.ContextFinder.newInstance (Unknown Source) en javax.xml. bind.ContextFinder.find (Fuente desconocida) en javax.xml.bind.JAXBContext.newInstance (Fuente desconocida) en javax.xml.bind.JAXBContext.newInstance (Fuente desconocida) en com.PojoToXSD.m ain (PojoToXSD.java:17)
Tomé el ejemplo como:
package **com.model**; ---->this package contains ''Address'' class and ''City'' class
public class Address {
private String areaName;
private City currentCity;
private com.common.City previousCity;
}
package com.model;
public class City {
private String cityName;
}
Otra clase de ciudad en el paquete "com.common".
package **com.common**;
public class City {
private String pinCode;
}
Necesitamos crear XSDs y hacer el Marshalling y el desmonte con el código existente en nuestro proyecto (como el código de ejemplo anterior), el código no tiene ninguna anotación como "@ XmlRootElement / @ XmlType" y no podemos cambiar el código fuente.
Me gustaría saber si hay alguna solución para solucionar el problema anterior o alguna otra forma de crear XSD y calcular / desordenar (como MOXy..etc)?
Sería genial si pudiera obtener la solución de cualquiera ... Mayo, gracias de antemano.
Gracias,
Satya