2016-09-27 29 views
0

私は、ws請願を取得し、どのwを呼び出さなければならないかを選択し、それを呼び出し、応答を取得し、構文解析してクライアントに返すJava JWSで行われた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> 

そして彼らの復帰。この私がモデルの「特定フィールド(両方請願と応答して)、ラベル@XmlAnyElement(偽= LAX)を使用してきたので、私のサービスでは、私はすべてのコールを取得を行うには

<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> 

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はクライアントに何も返さない(長さ0のHTTP応答200)...

また、私が設定されている場合は、手動で、「NULL」のオブジェクトに対する応答の「具体的な」部分はよく整列化され、私のクライアントは、受信:

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

は、だから私はそれがElementNSImplを待っていますことを考えますしかし、JAXBにアノテートされたオブジェクトからビルドする方法はわかりません。

答えて

1

まあ、私は私の最高の日ではないよ:

はElementNSImplその、明らかに、要素の実装、そうするだけのものは要素にオブジェクトをマーシャリングすると「ずさんでそれを返すことです= false '。

この方法は、それをしない:私はそこに、サービスをdiferentとする各diferentコールでそれを呼び出すことができます

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(); 
    } 

この方法では、私が使用する必要がある特定のどのクラスを知っていますよ。

関連する問題