2012-05-29 232 views
2

我有以下POJO,并根元素在XML文件中没有显示(送过来SOAP JAX-WS调用),人们可以指出问题所在吗?JAXB注释rootElement的

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

} 
+1

后的代码使用的是序列化对象到XML。 – Perception

+0

在原始问题 –

回答

1

回答我的问题

这是什么@WebResult

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

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

,你可以看到 “回归” 的JAX-WS(JRS181)默认实现默认情况下。 变化@WebResult(NAME =“目录”),解决了这个问题

0

我认为你需要一个package-info.java fil E,尝试这样的事情:

@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。应该可以。

+0

中增加了新代码,谢谢。类型必须是FIELD我猜@ xmlAccessorType(XmlAccessType.FIELD)是因为我使用类字段作为带注释的目标,会尝试其余的。 –