簡體   English   中英

JAXB注釋RootElement

[英]JAXB annotation RootElement

我有以下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;

xml文件看起來像

            <COMMENT>LK</COMMENT>
            <VERSION>4</VERSION>
            <VALID_FROM_DTS>1990-01-25T00:00:00Z</VALID_FROM_DTS>
            <CREATED_DTS>2012-05-14T15:49:38.655+01:00</CREATED_DTS>
            <ITEMLIST>
                <ITEM>
                    <NAME>Adult Period Pass Corsham</NAME>
                    <DESC>1 week</DESC>
                    <SKU>ACT-38</SKU>
                    <PRICE>15</PRICE>
                    <CATEGORIES>
                        <CATEGORY>
                            <CategoryName>Product</CategoryName>
                            <CategoryDate>1 week</CategoryDate>
                            <CategorySortOrder>0</CategorySortOrder>
                        </CATEGORY>
                        <CATEGORY>
                            <CategoryName>Product Type</CategoryName>
                            <CategoryDate>Coach</CategoryDate>
                            <CategorySortOrder>0</CategorySortOrder>
                        </CATEGORY>
                        .....................

我希望有類似的東西

         <CATALOGUE>     <-----------missing!!!
            <COMMENT>LK</COMMENT>
            <VERSION>4</VERSION>
            <VALID_FROM_DTS>1990-01-25T00:00:00Z</VALID_FROM_DTS>
            <CREATED_DTS>2012-05-14T15:49:38.655+01:00</CREATED_DTS>
            <ITEMLIST>
                <ITEM>
                    <NAME>Adult Period Pass Corsham</NAME>
                    <DESC>1 week</DESC>
                    <SKU>ACT-38</SKU>
                    <PRICE>15</PRICE>
                    <CATEGORIES>
                        <CATEGORY>
                            <CategoryName>Product</CategoryName>
                            <CategoryDate>1 week</CategoryDate>
                            <CategorySortOrder>0</CategorySortOrder>
                        </CATEGORY>
                        <CATEGORY>
                            <CategoryName>Product Type</CategoryName>
                            <CategoryDate>Coach</CategoryDate>
                            <CategorySortOrder>0</CategorySortOrder>
                        </CATEGORY>
                        .....................
                 </CATALOGUE>

用於返回對象的代碼是

@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;  
        }  

}

回答我自己的問題

這是@WebResult的JAX-WS(JRS181)默認實現

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

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

如您所見,默認情況下是“返回”。 更改為@WebResult(name =“ CATALOGUE”)解決了該問題

我認為您需要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;

只需將其放在包的根目錄中,根據需要進行編輯,然后再次生成xsd。 應該可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM