Java JAXB注释根元素

Java JAXB注释根元素,java,xml,jakarta-ee,jaxb,Java,Xml,Jakarta Ee,Jaxb,我有以下POJO,并且根元素没有显示在xml文件中(通过SOAP jax ws调用发送),人们能指出问题吗 @XmlRootElement(name = "CATALOGUE") @XmlAccessorType( XmlAccessType.FIELD ) public class Catalogue implements Serializable, Comparable<Catalogue> { @XmlTransient private Integer cat

我有以下POJO,并且根元素没有显示在xml文件中(通过SOAP jax ws调用发送),人们能指出问题吗

@XmlRootElement(name = "CATALOGUE")
@XmlAccessorType( XmlAccessType.FIELD )
public class Catalogue implements Serializable, Comparable<Catalogue>
{

    @XmlTransient
    private Integer catalogueId;

    @XmlElement( name = "COMMENT", required = false, nillable = false )
    private String catalogueComment;

    @XmlElement( name = "VERSION", required = false, nillable = false )
    private String catalogueVersion;

    @XmlElement( name = "VALID_FROM_DTS", required = false, nillable = false )
    private Date catalogueValidFromDts;

    @XmlElement( name = "CREATED_DTS", required = false, nillable = false )
    private Date catalogueCreatedDts;

    @XmlElementWrapper(name = "ITEMLIST")
    @XmlElement(name = "ITEM")
    private List<Item> itemList;

    @XmlTransient
    private Integer catalogueLifecyclePhase;

    @XmlTransient
    private Integer ownerId;

我认为您需要一个package-info.java文件,请尝试以下方式:

@XmlSchema(namespace = "<your namespace>",

xmlns = @XmlNs(prefix = "<your prefix>", namespaceURI = "<your namespace>"),

elementFormDefault = XmlNsForm.QUALIFIED

)
@XmlAccessorType(XmlAccessType.NONE)
@XmlAccessorOrder(XmlAccessOrder.UNDEFINED)
package your.package.name;

import javax.xml.bind.annotation.XmlAccessOrder;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorOrder;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
@XmlSchema(名称空间=”,
xmlns=@xmlns(前缀=”,命名空间URI=”),
elementFormDefault=XmlNsForm.QUALIFIED
)
@XmlAccessorType(XmlAccessType.NONE)
@XmlAccessorOrder(XmlAccessOrder.UNDEFINED)
打包您的.package.name;
导入javax.xml.bind.annotation.XmlAccessOrder;
导入javax.xml.bind.annotation.XmlAccessType;
导入javax.xml.bind.annotation.XmlAccessorOrder;
导入javax.xml.bind.annotation.XmlAccessorType;
导入javax.xml.bind.annotation.XmlNs;
导入javax.xml.bind.annotation.XmlNsForm;
导入javax.xml.bind.annotation.XmlSchema;
只需将它放在包的根目录中,根据需要进行编辑并再次生成xsd。应该没问题。

回答我自己的问题

这是JAX-WS(JRS181)对@WebResult的默认实现

@Retention(value=RetentionPolicy.RUNTIME)
@Target({METHOD})
public @interface WebResult {

    String name() default "return";
    String targetNamespace() default "";
    boolean header() default false;
    String partName() default "";
}
如您所见,“return”默认为。
更改为@WebResult(name=“catalog”)解决了问题

将用于将对象序列化为XML的代码发布。向原始问题添加了新代码,谢谢。类型必须是FIELD,我猜@xmlacessortype(xmlacesstype.FIELD),因为我使用类字段作为带注释的目标,将尝试其余的。
@Stateless
@Remote
@WebService
public class CatalogueManagerSoapService
{

    public CatalogueManagerSoapService()
    {
        // TODO Auto-generated constructor stub
    }

    @EJB
    private SOAPExportService userService;


    @WebMethod
    public Catalogue getLatestCatalogue(
            String username,
            String password,
            String catalogueName ) throws Exception
    { 
          Catalogue c = CatManager.getCatalogue();    
          return c;  
        }  

}
@XmlSchema(namespace = "<your namespace>",

xmlns = @XmlNs(prefix = "<your prefix>", namespaceURI = "<your namespace>"),

elementFormDefault = XmlNsForm.QUALIFIED

)
@XmlAccessorType(XmlAccessType.NONE)
@XmlAccessorOrder(XmlAccessOrder.UNDEFINED)
package your.package.name;

import javax.xml.bind.annotation.XmlAccessOrder;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorOrder;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
@Retention(value=RetentionPolicy.RUNTIME)
@Target({METHOD})
public @interface WebResult {

    String name() default "return";
    String targetNamespace() default "";
    boolean header() default false;
    String partName() default "";
}