Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB对象工厂不包含JAXBElement创建方法_Java_Jakarta Ee_Jaxb - Fatal编程技术网

Java JAXB对象工厂不包含JAXBElement创建方法

Java JAXB对象工厂不包含JAXBElement创建方法,java,jakarta-ee,jaxb,Java,Jakarta Ee,Jaxb,我有一个名为MYClass的类,其代码如下所示 package com.rest; public class MyClass { private String var; public String getVar() { return var; } public void setVar(String var) { this.var = var; } } 我已经使用schemagen../src/com/rest/M

我有一个名为MYClass的类,其代码如下所示

package com.rest;


public class MyClass {

    private String var;

    public String getVar() {
        return var;
    }

    public void setVar(String var) {
        this.var = var;
    }
}
我已经使用schemagen../src/com/rest/MyClass.java创建了它的模式 生成的架构:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="myClass">
    <xs:sequence>
      <xs:element name="var" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

然后,我使用模式创建了JAXB工件

xjc -d <my_source_dir>\ -p com.rest.generated <my_generated_schema>.xsd
xjc-d \-p com.rest.generated.xsd
下面给出了生成的工件代码

对象工厂:

//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 
// 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.06.01 at 08:56:31 PM PKT 
//


package com.rest.generated;

import javax.xml.bind.annotation.XmlRegistry;


/**
 * This object contains factory methods for each 
 * Java content interface and Java element interface 
 * generated in the com.rest.generated 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 {


    /**
     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: com.rest.generated
     * 
     */
    public ObjectFactory() {
    }

    /**
     * Create an instance of {@link MyClass }
     * 
     */
    public MyClass createMyClass() {
        return new MyClass();
    }

}
//
//该文件由JDK 6中的JavaTM XML绑定体系结构(JAXB)参考实现vJAXB 2.1.10生成
//看
//重新编译源架构时,对此文件的任何修改都将丢失。
//生成日期:2012.06.01北京时间下午8:56:31
//
包com.rest.generated;
导入javax.xml.bind.annotation.XmlRegistry;
/**
*此对象包含每个对象的工厂方法
*Java内容接口和Java元素接口
*在com.rest.generated包中生成。
*ObjectFactory允许您以编程方式
*构造Java表示的新实例
*用于XML内容。XML的Java表示
*内容可以由模式派生的接口组成
*和表示模式绑定的类
*类型定义、元素声明和模型
*小组。每种方法的工厂方法如下:
*本课程提供。
* 
*/
@XmlRegistry
公共类对象工厂{
/**
*创建一个新的ObjectFactory,可用于为包com.rest.generated创建架构派生类的新实例
* 
*/
公共对象工厂(){
}
/**
*创建{@link MyClass}的实例
* 
*/
公共MyClass createMyClass(){
返回新的MyClass();
}
}
而MyClass.java是

//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 
// 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.06.01 at 08:56:31 PM PKT 
//


package com.rest.generated;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;


/**
 * <p>Java class for myClass complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="myClass">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="var" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "myClass", propOrder = {
    "var"
})
public class MyClass {

    protected String var;

    /**
     * Gets the value of the var property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getVar() {
        return var;
    }

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

}
//
//该文件由JDK 6中的JavaTM XML绑定体系结构(JAXB)参考实现vJAXB 2.1.10生成
//看
//重新编译源架构时,对此文件的任何修改都将丢失。
//生成日期:2012.06.01北京时间下午8:56:31
//
包com.rest.generated;
导入javax.xml.bind.annotation.XmlAccessType;
导入javax.xml.bind.annotation.XmlAccessorType;
导入javax.xml.bind.annotation.XmlType;
/**
*myClass复杂类型的Java类。
* 
*以下架构片段指定此类中包含的预期内容。
* 
* 
*complexType name=“myClass”>
*complexContent>
*限制基数=”{http://www.w3.org/2001/XMLSchema}任何类型“>
*序列>
*元素名称=“var”类型=”{http://www.w3.org/2001/XMLSchema}字符串“minOccurs=”0“/>
*/顺序>
*/限制>
*/complexContent>
*/complexType>
* 
* 
* 
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name=“myClass”,proporter={
“var”
})
公共类MyClass{
保护字符串变量;
/**
*获取var属性的值。
* 
*@返回
*可能的对象是
*{@link String}
*     
*/
公共字符串getVar(){
收益var;
}
/**
*设置var属性的值。
* 
*@param值
*允许的对象是
*{@link String}
*     
*/
公共void setVar(字符串值){
this.var=值;
}
}

问题:找不到创建JAXBElement的方法。我应该怎么做才能得到这个方法呢?

XJC只会在必要时将字段创建为JAXBElements,而且只有当映射需要一些不能用“正常”JavaBean语义表示的元信息时才真正需要


当一个字段同时为nillable且minOccurs=0时,这是一个必要的示例。如果您这样定义一个元素,您将得到一个JAXBElement作为字段类型而不是目标类型。这样您就可以区分“nil”和“not provided”,这大概是您需要做的(否则您就不会在模式中以这种方式定义它)。

如果您想创建MyClass的实例

org.jboss.resteasy.plugins.providers.jaxb.JAXBMarshalException: The method createclass <package name here>.<class name here>() was not found in the object Factory!
    at org.jboss.resteasy.plugins.providers.jaxb.JAXBXmlTypeProvider.wrapInJAXBElement(JAXBXmlTypeProvider.java:175)
    at org.jboss.resteasy.plugins.providers.jaxb.JAXBXmlTypeProvider.writeTo(JAXBXmlTypeProvider.java:74)
    at org.jboss.resteasy.core.interception.MessageBodyWriterContextImpl.proceed(MessageBodyWriterContextImpl.java:117)

如果要从类创建XML,请使用封送拆收器;如果要从XML文件创建MyClass的对象,请使用解组拆收器。

这通常还会导致以下异常

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="myClass">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="var" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  </xs:element>
</xs:schema>
org.jboss.resteasy.plugins.providers.jaxb.JAXBMarshalException:在对象工厂中找不到方法createclass。()!
位于org.jboss.resteasy.plugins.providers.jaxb.JAXBXmlTypeProvider.wrapInJAXBElement(JAXBXmlTypeProvider.java:175)
位于org.jboss.resteasy.plugins.providers.jaxb.JAXBXmlTypeProvider.writeTo(JAXBXmlTypeProvider.java:74)
在org.jboss.resteasy.core.interception.MessageBodyWriterContextImpl.procedure上(MessageBodyWriterContextImpl.java:117)
问题在于您的模式,请将其更改为具有外部标记。然后,这将生成包含@XmlRootElement注释的代码

按如下方式更改架构:



然后运行在这个新模式上创建JAXB工件的xjc步骤。

当我使用marshall/unmarshall时,会发生以下异常:20:55:39809错误[stderr](http-localhost-127.0.0.1-8080-4)javax.xml.bind.MarshalException 20:55:39809错误[stderr](http-localhost-127.0.0.1-8080-4)-带有链接的异常:20:55:39809错误[stderr](http-localhost-127.0.0.1-8080-4)[com.sun.istack.SAXException2:无法将类型“com.rest.generated.MyClass”封送为元素,因为它缺少@XmlRootElement注释]20:55:39810错误[stderr](http-localhost-127.0.0.1-8080-4)位于com.sun.xml.bind.v2.runtime.MarshallImpl.write(marshallImpl.jav
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="myClass">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="var" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  </xs:element>
</xs:schema>