2017-05-18 11 views
0

私はREST Webサービスを持っていて、Soapリクエストを呼び出しています。 soap応答をjsonに変換して、RESTサービスに出力として返すことができるようにしたいと思います。これを達成する最も効率的な方法は何ですか?JavaのSOAPレスポンスからjsonを作成してください

疑問を解決するには、以下のようなSOAP応答xmlを取得したとします。

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> 
    <soap:Body xmlns:m="http://www.example.org/stock"> 
     <m:GetStockPriceResponse> 
      <m:Price>344.5</m:Price> 
     </m:GetStockPriceResponse> 
    </soap:Body> 
</soap:Envelope> 

私は、JSONがこの

{ "価格": "344.5"}のようになりたい

私はorg.jsonでXMLtoJSONObject方法を試してみました。しかし、それは私が期待している出力を与えるものではありません。

+0

あなたに期待される出力を与える単一のライブラリがあってはなりません。必要な値をそれぞれのキーに手動でマップするXMLパーサに基づいてフィルタを作成する必要があります。 – Vilsol

+0

ルックアップジャージーは、Java POJOをJSONに、またその逆に変換できます。したがって、XMLエンティティを表すPOJOを持っていれば、ソートされます。しかし、JSONの文字列の出力は期待通りではないかもしれません。 –

+0

変換しようとしている元の応答は非常に大きく、多くのデータが含まれています。だから私は自分自身のフィルタを書いている間にパフォーマンスが心配です。これを行う標準的な方法はありますか? – jubin

答えて

1

は、あなたが試してみました:あなたはのJava 8以降を使用している場合

public String XMLtoJSON(String xml) { 
    JSONObject jsonObj = XML.toJSONObject(xml); 
    String json = jsonObj.toString(); 
    return json; 
} 
+1

はい。しかし、それは私が出力として言及したような純粋なjsonではありません。 soapタグをjsonに変換します。 – jubin

+0

変換はとにかく行いますか –

0

を、あなたは私のオープンソースのライブラリをチェックアウトする必要があります:unXml。 unXmlは基本的にXpathsからJson-attributesにマップします。

Maven Centralで利用できます。

import com.fasterxml.jackson.databind.node.ObjectNode; 
import com.nerdforge.unxml.factory.ParsingFactory; 
import com.nerdforge.unxml.parsers.Parser; 
import org.w3c.dom.Document; 

public class Parser { 
    public ObjectNode parseXml(String xml){ 
    Parsing parsing = ParsingFactory.getInstance(namespaces()).create(); 
    Document document = parsing.xml().document(xml); 

    Parser<ObjectNode> parser = parsing.obj("//m:GetStockPriceResponse") 
     .attribute("price", "m:Price", parsing.number()) 
     .build(); 

    ObjectNode result = parser.apply(document); 
    return result; 
    } 

    private Map<String, String> namespaces(){ 
    return new HashMap<String, String>(){{ 
     put("m", "http://www.example.org/stock"); 
    }}; 
    } 
} 

それは次のようなJSONで、JacksonObjectNodeを返します。

{"price":344.5} 
関連する問題