2016-09-27 40 views
0

我有一個應用程序,它是一個使用java JWS完成的WS調度程序,它可以獲取ws請求,選擇必須調用哪些ws,調用它,獲取響應,解析並將其返回給客戶端。Java WS:如何從模型對象構建ElementNSImpl?

要做到這一點,我有一個與我的相關服務,並與服務的具體信息另一部分信息的一部分組成的XML必須被調用,所以2個diferent電話可能是:

<petition> 
    <generic><servicename>ws1</servicename></generic> 
    <especific>.... whatever....</especific> 
</petition> 

<petition> 
    <generic><servicename>ws2</servicename></generic> 
    <especific>.... whatever needed for ws3....</especific> 
</petition> 

和他們的回報;

<return> 
    <generic><servicename>ws1</servicename></generic> 
    <specific><city>bilbao</city></specific> 
</return> 


<return> 
    <generic><servicename>ws2</servicename></generic> 
    <specific> 
    <person> 
     <name>Olof</name> 
    </person> 
    </specific> 
</return> 

要做到這一點,我已經(均在請願書和響應)使用的標籤@XmlAnyElement(LAX = FALSE)在我的模型的「特定」所以,在我的服務,我得到的所有來電作爲JWS不能解析的內部(特定部分)的「請願」;我將在每一個服務的特定部分使用編組,並讓他知道哪些特定的模型,必須使用稱爲解析它:

@XmlAccessorType(XmlAccessType.FIELD) 
    @XmlType(name = "", propOrder = {}) 
    @XmlRootElement(name = "petition") 
    public class Petition{ 
     .... 
     @XmlAnyElement(lax=false) 
     private Object specific; 
     .... 
    } 

(Same for the response object.) 

這項工作做得很好,當我從我所說的服務和回報目標它直接作爲'特定'字段中的ElementNSImpl對象,但通常我必須解析它(通常,我返回的特定對象與返回給我的對象的類型不同),我無法做到這一點。

在這種情況下,我必須創建一個新的對象(從我想返回的類型),填充它獲得的信息並將其返回給我的客戶端。好吧,我這樣做,我在它的服務的特定數據對象中建立一個「響應」設置並嘗試返回它,但是WS不向客戶端返回任何內容(長度爲200的HTTP響應:0)...

而且,如果我設置,手動,應對「空」對象的「特殊」部分以及整理和我的客戶接受:

<response> 
<generic><servicename>ws2</servicename></generic> 
</response> 

所以我認爲這是等待「ElementNSImpl '但我不知道如何從JAXB註釋的對象中構建它。

回答

1

嗯,我不是我最好的一天:

ElementNSImpl它,顯然,元素的實現,這樣做的唯一一件事就是對象編組爲一個元素,它在「寬鬆迴歸=假」。

這種方法做的:

public Element marshallToElement(Object specific, Class clazz) throws JAXBException{ 
     DOMResult res = null; 
     JAXBContext ctx = JAXBContext.newInstance(clazz); 
     Marshaller marshaller = ctx.createMarshaller(); 
     res = new DOMResult(); 
     marshaller.marshal(specific, res); 
     return ((Document)res.getNode()).getDocumentElement(); 
    } 

這樣我可以把它在每個diferent調用diferent服務,在那裏,我就知道哪些特定的類必須使用。