1

RESTful Web サービスへのリクエストを行う JavaFX2.2 を試してみました。Web サービスを作成するために、次の Netbeans ガイドに従いました: http://netbeans.org/kb/docs/websvc/rest.html (私のデータベースに基づく)。

エンティティ、構成、およびサービス パッケージが正常に生成され、プロジェクトを右クリックして [RESTful Web サービスのテスト...] を選択してサービスをテストすると、すべてが機能しているように見えます (XML 応答を取得する)。

次に、この Web サービスへのリクエストを行う JavaFX2 アプリケーションを作成してみます。そのために、DAPFacadeREST サービスに基づいて、Jersey Client (これも Netbeans 7.2 によって生成されます) を使用します。アプリケーションでボタンを押すと、以下が実行されます。

NewJerseyClient njc = new NewJerseyClient();

String s = njc.find_XML(String.class, "1");  

System.out.println("Output from Server .... \n");
System.out.println(s);

これにより、サーバーから次の応答が返されます。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <dap>
        <adres>Street 1</adres>
        <btw></btw>
        <contactPersoon></contactPersoon>
        <dapid>1</dapid>
        <email>blablabla@skynet.be</email>
        <gemeente>RandomCity</gemeente>
        <land>België</land>
        <naam>Paul The Man</naam>
        <postcode>9999</postcode>
        <tel>+32999 88 77 66</tel>
    </dap>

この情報は正しいですが、今私は立ち往生しています。これをJavaFX2オブジェクト、できれば次のようなものに変換したい:

public class DAP {
    private  SimpleIntegerProperty DAPID = new SimpleIntegerProperty();
    private  SimpleStringProperty naam = new SimpleStringProperty("");
    private  SimpleStringProperty contactPersoon = new SimpleStringProperty("");
    private  SimpleStringProperty adres = new SimpleStringProperty("");
    private  SimpleStringProperty postcode = new SimpleStringProperty("");
    private  SimpleStringProperty gemeente = new SimpleStringProperty("");
    private  SimpleStringProperty land = new SimpleStringProperty("");
    private  SimpleStringProperty telefoonnummer = new SimpleStringProperty("");
    private  SimpleStringProperty btw = new SimpleStringProperty("");
    private  SimpleStringProperty email = new SimpleStringProperty("");

    //constructor, getters & setters below

これは可能ですか?つまり、SOAP ではプロキシ クラスを使用できますが、SimpleIntegerProperty はサーバー側 (JavaEE 6) では認識されません。それが、REST を使用する理由です。これは SOAP と同じ問題になるのでしょうか? サーバー側 (RESTful Web サービス) では、生成されたエンティティは次のようになるためです。

public class DAP implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "DAPID")
private Integer dapid;
@Basic(optional = false)
@NotNull
@Lob
@Size(min = 1, max = 65535)
@Column(name = "Naam")
private String naam;
@Basic(optional = false)
@NotNull
@Lob
@Size(min = 1, max = 65535)
//etc

これらのフィールド「naam」は単なる通常の文字列であり、クライアント側で SimpleStringProperty にしたいと考えています。

私はすでに JAXB についていくつか読んだことがありますが、クライアント側で何を作成し、サーバー側で何を作成する必要があるかを理解していません。私が間違っていなければ、どこかに xsd ファイルを作成する必要がありますか? しかし、繰り返しになりますが、これは SimpleStringProperty をタイプとしてサポートしますか?

長い投稿で申し訳ありませんが、誰かが私を助けてくれることを願っています...よろしくお願いします。

4

1 に答える 1

1

XmlAdapterを処理する を作成できますSimpleStringProperty。JAXB (JSR-222) は JAX-WS (SOAP) と JAX-RS (RESTful) Web サービスの両方の標準バインディング レイヤーであるため、このアプローチを両方に使用できます。次のXmlAdapterようになります

public class SimpleStringPropertyAdatper extends XmlAdapter<String, SimpleStringProperty> {

   @Override
    public SimpleStringProperty unmarshal(String v) throws Exception {
        return new SimpleStringProperty(v);
    }

    @Override
    public String marshal(SimpleStringProperty v) throws Exception {
        if(null == v) {
            return v;
        }
        return v.getString(); // Or whatever the correct method is
    } 

}

@XmlJavaTypeAdapter注釈は、クラスを使用してパッケージ情報でこれを行うことができる構成に使用さXmlAdapterpackage-info、指定されたクラスのすべてのインスタンスにアダプターを使用する必要があることを指定します。

@XmlJavaTypeAdapters({
    @XmlJavaTypeAdapter(value=SimpleStringPropertyAdapter.class, type=String.class),
    @XmlJavaTypeAdapter(value=SimpleIntegerPropertyAdapter.class, type=Integer.class),
})
package com.example;

import javax.xml.bind.annotation.adapters.*; 

詳細については

于 2012-09-12T14:46:20.550 に答える