2

現在、作成/解析にJavaの組み込みXMLDOMライブラリを使用しています。醜いことに、ヘルパークラスとメソッドがたくさんあり、パフォーマンスとメモリ使用量が悪い場合でも。

RESTサービスの作成と利用に関してXMLを処理するための最良のJavaツールまたはフレームワークは何ですか?

私が使用するサービスはJAXBを使用しています。私は彼らのクラスを使うことができたので、彼らのサービスをとても便利にそして簡単に利用することができました。それは美しいものでしたが、JAXBはほとんどの状況でまだかなり苦痛です。そこで、StAXとVTD-XMLを調べました。StAXは約4年間更新されていません。VTD-XMLは、JavaでのXML処理の最先端ですか?

4

3 に答える 3

6

JAXB注釈付きクラスを記述できるはずです。Jerseyはこれらをすぐにサポートし、自動的に解析します。これは最もパフォーマンスの高いソリューションではないかもしれませんが、本当に素晴らしいクリーンなアプリになります。

パフォーマンスの問題があることを証明できない限り(そしてそれをJAXBまで追跡できるのでなければ)、マーシャリング/アンマーシャリングのオーバーヘッドについて心配する必要はありません。

編集:
JAXB注釈付きクラスは非常に単純な場合があります。次のようなXMLのモデリング。

<customer>
  <name>Fred</name>
  <email>fred@email.com</email>
  <id>12345</id>
</customer>

これと同じくらい簡単です。

@XmlRootElement
public class Customer
{
  private String name;
  private String email;
  private long id;

  public Customer()
  {
  }

  //getters and setters
}

その後、このようなサービスを作成できます。

@GET
@Produces(MediaType.APPLICATION_XML)
@Path("/getCustomer")
public Customer getCustomer()
{
  Customer c = new Customer();
  c.setName("Fred");
  c.setEmail("fred@email.com");
  c.setId(12345);
  return c;
}

..そしてこのようなクライアント;

Client client = Client.create();
WebResource resource = client.resource("myHost/getCustomer");
Customer fred = resource.get(Customer.class):

その美しくシンプル。

于 2010-10-11T12:04:11.150 に答える
1

StAXは、更新する必要がなかったため、長い間更新されていません。XML形式は変更されておらず、StAXはその形式をAPIにマッピングする非常に単純なものです。低レベルのXMLAPIが進むにつれて、それは非常に使いやすく、私は非常に効率的だと信じています。ただし、これは非常に低レベルのAPIです。これは(非常に大まかに)バイナリデータを書き込むためのDataInputStreamおよびDataOutputSteamと同等のXMLです。それを使用して記述されたコードは、要素、属性などの概念レベルで記述される必要があります。私はVTD-XMLを使用していませんが、ほぼ同じように見えます。

より高いレベルのものを使用したい場合は、XStreamなどのXMLシリアル化ツールのいくつかを見てください-変換を適切にカスタマイズして、受信データから読み取ることができるクラスを作成できますか?次に、欠落しているフィールドを単に無視して、微妙に異なる入力に同じクラスを使用できますか?実際、JAXBで「欠落しているXML要素は無視される」アプローチを使用できますか?スキーマについてどれほど厳格であるか、または入力にそのようにアプローチできるかどうかはわかりません。ここは暗闇の中で撮影しています。

于 2010-10-11T13:10:53.053 に答える
0

SpringMVC3+をお勧めします。RESTサービスにはすぐに使用できるサポートがあります。Springをご存知の場合、RESTサービスの作成には数分かかります...

http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/

于 2010-10-11T19:20:04.997 に答える