2012-12-30 64 views
1

序列化的通用字段JAXB我們有一個類定義了一個對象ID(UID):使用XMLAdapter

公共最終類UUID實現Serializable,可比{ .... }

和另一類:

@XmlType(name = "ChangeFieldValueInstruction") 
    public static class ChangeFieldValueInstruction<T> extends Instruction 
    { 
     private T newVal; 

     public ChangeFieldValueInstruction() 
     { 
      super(); 
     } 

     public ChangeFieldValueInstruction(String fieldPath, T newVal) 
     { 
      super(fieldPath); 
      setNewVal(newVal); 
     } 


     public T getNewVal() 
     { 
      return newVal; 
     } 

     public void setNewVal(T newVal) 
     { 
      this.newVal = newVal; 
     } 
     ................ 
    } 

這個類(UpdateObjectRequest)通過Web服務傳遞(我們使用的彈簧)。

我有一個package-info文件,它爲UUID.class定義了一個適配器,但是當我們傳遞給newVal一個UID對象時,我們看到那個適配器沒有被調用,實際上調用了默認的UID構造函數。 我嘗試使用@XmlAnyElement註釋getNewVal()方法,並將@XmlJavaTypeAdapter添加到UID類(以及此處建議的人員),但仍然無效。也嘗試使用@XmlSeeAlso(UUID.class)註釋UpdateObjectRequest 順便說一句,在xsd我看到newVal被定義爲xs:anyType

所以有誰知道我該如何得到這個工作? 10X。

+0

看一看這個http://blog.bdoughan.com/2012/12/jaxbs-xmlanyelementlaxtrue-explained。 html我認爲'@XmlAnyElement(lax = true)'完全符合你的要求。 – earcam

回答

0

不可能,恕我直言。

這應該如何工作?您將擁有SOAP WebService有效負載的動態XML模式。 接收服務應該如何反應,他無法猜測元素的類型。

使用SOAP,Web服務及其操作,XML類型在WSDL-WebService定義中預先定義。 這就是客戶端和服務器如何互操作的原因,因爲它們是以非負載格式進行協商的。

您需要確切定義,哪些消息,類型可以WS客戶端和服務器之間傳遞

+0

是的它是有道理的,但是,它適用於其他類型,如String,int等...所以你認爲這是不可能的?也許我們可以以某種方式解決它? – paranoidAndroid

+0

使用混凝土類傳輸。 – burna

+0

你能解釋一下嗎?我們需要newVal是泛型的(或者對象 - 我理解的是相同的),因爲它可以是任何類型的。 – paranoidAndroid

相關問題