Java 在像web-app_2_5.xsd这样的xsd上使用xjc(jaxb)不会';不要创建可用的映射 在类似web-app_2_5.xsd的xsd上使用xjc(jaxb)不会创建可用的映射

Java 在像web-app_2_5.xsd这样的xsd上使用xjc(jaxb)不会';不要创建可用的映射 在类似web-app_2_5.xsd的xsd上使用xjc(jaxb)不会创建可用的映射,java,jaxb,xjc,xmlbeans,jibx,Java,Jaxb,Xjc,Xmlbeans,Jibx,没有@XmlAccessorType,也没有办法使用映射对XML进行封送和解封。如何修改这些映射以创建可用文件?(ant、maven、xjc命令行都给出相同的输出) 以下是生成的WebAppType,例如: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "web-appType", propOrder = { "descriptionAndDisplayNameAndIcon" }) public class WebAppTy

没有@XmlAccessorType,也没有办法使用映射对XML进行封送和解封。如何修改这些映射以创建可用文件?(ant、maven、xjc命令行都给出相同的输出)

以下是生成的WebAppType,例如:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "web-appType", propOrder = {
    "descriptionAndDisplayNameAndIcon"
})
public class WebAppType {

    @XmlElementRefs({
        @XmlElementRef(name = "resource-env-ref", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "post-construct", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "icon", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "error-page", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "jsp-config", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "message-destination", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "display-name", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "security-constraint", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "message-destination-ref", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "security-role", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "pre-destroy", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "filter", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "env-entry", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "ejb-ref", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "filter-mapping", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "mime-mapping", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "distributable", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "persistence-unit-ref", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "login-config", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "servlet", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "ejb-local-ref", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "description", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "service-ref", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "persistence-context-ref", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "context-param", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "resource-ref", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "session-config", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "locale-encoding-mapping-list", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "servlet-mapping", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "welcome-file-list", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class),
        @XmlElementRef(name = "listener", namespace = "http://java.sun.com/xml/ns/javaee", type = JAXBElement.class)
    })
    protected List<JAXBElement<?>> descriptionAndDisplayNameAndIcon;
    @XmlAttribute(name = "version", required = true)
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    protected java.lang.String version;
    @XmlAttribute(name = "id")
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlID
    @XmlSchemaType(name = "ID")
    protected java.lang.String id;
    @XmlAttribute(name = "metadata-complete")
    protected Boolean metadataComplete;

    /**
     * Gets the value of the descriptionAndDisplayNameAndIcon 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 descriptionAndDisplayNameAndIcon property.
     *
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getDescriptionAndDisplayNameAndIcon().add(newItem);
     * </pre>
     *
     *
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link JAXBElement }{@code <}{@link ResourceEnvRefType }{@code >}
     * {@link JAXBElement }{@code <}{@link LifecycleCallbackType }{@code >}
     * {@link JAXBElement }{@code <}{@link IconType }{@code >}
     * {@link JAXBElement }{@code <}{@link ErrorPageType }{@code >}
     * {@link JAXBElement }{@code <}{@link JspConfigType }{@code >}
     * {@link JAXBElement }{@code <}{@link MessageDestinationType }{@code >}
     * {@link JAXBElement }{@code <}{@link DisplayNameType }{@code >}
     * {@link JAXBElement }{@code <}{@link SecurityConstraintType }{@code >}
     * {@link JAXBElement }{@code <}{@link MessageDestinationRefType }{@code >}
     * {@link JAXBElement }{@code <}{@link SecurityRoleType }{@code >}
     * {@link JAXBElement }{@code <}{@link LifecycleCallbackType }{@code >}
     * {@link JAXBElement }{@code <}{@link FilterType }{@code >}
     * {@link JAXBElement }{@code <}{@link EnvEntryType }{@code >}
     * {@link JAXBElement }{@code <}{@link EjbRefType }{@code >}
     * {@link JAXBElement }{@code <}{@link FilterMappingType }{@code >}
     * {@link JAXBElement }{@code <}{@link MimeMappingType }{@code >}
     * {@link JAXBElement }{@code <}{@link EmptyType }{@code >}
     * {@link JAXBElement }{@code <}{@link PersistenceUnitRefType }{@code >}
     * {@link JAXBElement }{@code <}{@link LoginConfigType }{@code >}
     * {@link JAXBElement }{@code <}{@link ServletType }{@code >}
     * {@link JAXBElement }{@code <}{@link EjbLocalRefType }{@code >}
     * {@link JAXBElement }{@code <}{@link DescriptionType }{@code >}
     * {@link JAXBElement }{@code <}{@link ServiceRefType }{@code >}
     * {@link JAXBElement }{@code <}{@link PersistenceContextRefType }{@code >}
     * {@link JAXBElement }{@code <}{@link ParamValueType }{@code >}
     * {@link JAXBElement }{@code <}{@link ResourceRefType }{@code >}
     * {@link JAXBElement }{@code <}{@link SessionConfigType }{@code >}
     * {@link JAXBElement }{@code <}{@link ServletMappingType }{@code >}
     * {@link JAXBElement }{@code <}{@link LocaleEncodingMappingListType }{@code >}
     * {@link JAXBElement }{@code <}{@link WelcomeFileListType }{@code >}
     * {@link JAXBElement }{@code <}{@link ListenerType }{@code >}
     *
     *
     */
    public List<JAXBElement<?>> getDescriptionAndDisplayNameAndIcon() {
        if (descriptionAndDisplayNameAndIcon == null) {
            descriptionAndDisplayNameAndIcon = new ArrayList<JAXBElement<?>>();
        }
        return this.descriptionAndDisplayNameAndIcon;
    }

    /**
     * Gets the value of the version property.
     *
     * @return
     *     possible object is
     *     {@link java.lang.String }
     *
     */
    public java.lang.String getVersion() {
        return version;
    }

    /**
     * Sets the value of the version property.
     *
     * @param value
     *     allowed object is
     *     {@link java.lang.String }
     *
     */
    public void setVersion(java.lang.String value) {
        this.version = value;
    }

    /**
     * Gets the value of the id property.
     *
     * @return
     *     possible object is
     *     {@link java.lang.String }
     *
     */
    public java.lang.String getId() {
        return id;
    }

    /**
     * Sets the value of the id property.
     *
     * @param value
     *     allowed object is
     *     {@link java.lang.String }
     *
     */
    public void setId(java.lang.String value) {
        this.id = value;
    }

    /**
     * Gets the value of the metadataComplete property.
     *
     * @return
     *     possible object is
     *     {@link Boolean }
     *
     */
    public Boolean isMetadataComplete() {
        return metadataComplete;
    }

    /**
     * Sets the value of the metadataComplete property.
     *
     * @param value
     *     allowed object is
     *     {@link Boolean }
     *
     */
    public void setMetadataComplete(Boolean value) {
        this.metadataComplete = value;
    }

}
* * * *列表中允许以下类型的对象 *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} *{@link JAXBElement}{@code} * * */ 公共列表>(); } 返回this.description和DisplayNameAndIcon; } /** *获取version属性的值。 * *@返回 *可能的对象是 *{@link java.lang.String} * */ public java.lang.String getVersion(){ 返回版本; } /** *设置版本属性的值。 * *@param值 *允许的对象是 *{@link java.lang.String} * */ public void setVersion(java.lang.String值){ this.version=值; } /** *获取id属性的值。 * *@返回 *可能的对象是 *{@link java.lang.String} * */ public java.lang.String getId(){ 返回id; } /** *设置id属性的值。 * *@param值 *允许的对象是 *{@link java.lang.String} * */ public void setId(java.lang.String值){ this.id=值; } /** *获取metadataComplete属性的值。 * *@返回 *可能的对象是 *{@link Boolean} * */ 公共布尔值isMetadataComplete(){ 返回元数据完成; } /** *设置metadataComplete属性的值。 * *@param值 *允许的对象是 *{@link Boolean} * */ public void setMetadataComplete(布尔值){ this.metadataComplete=值; } } 实现将从任何XML模式(包括web-app_2_5.xsd)创建可用的映射

您需要在冒号(
)分隔的所有生成的包名列表上创建
JAXBContext

Unmarshaller unmarshaller = jc.createUnmarshaller();
Object result = unmarshaller.unmarshal(xml);
然后,您将能够通过执行以下操作将XML转换为Java对象(解组):

Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(result, System.out);
然后,您可以通过执行以下操作将对象写回XML(封送):


是的,但问题是我必须对web-app_2_5.xml中的web.xml的所有子部分执行此操作,然后将它们与string builder类型类粘合在一起,从而使JAXB在本例中的使用不比其他方法更容易。当XSD解析得很好或者您从JAXB创建模式时,它工作得很好,并且减少了开发time@user1889665-为什么您觉得需要这样做?使用jaxb和这个xsd无法从任何有效的web.xml中解压类。这个xsd在xmlbeans中也不起作用。但是,一旦删除jibx不支持的和标记(抛出错误),jibx就会创建能够正确创建web.xml的java类。对于jaxb和xmlbeans,您可以使用非常繁琐的代码构造xml,但是您不能为此解析任何xmlXSD@user1889665-我不知道你的意思。看起来好像您已经成功地生成了模型(您在问题中发布了一个类)。您尝试过用什么代码来进行解组?这是一个老问题,但总而言之,jaxb和xmlbeans没有从web.xml创建正确的代码,因为jibx确实正确地处理了一些注释和文档标记。在运行jaxb或xmlbeans之前,最好对xml文件中的这些标记进行grep处理,以避免出现问题
Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(result, System.out);