簡體   English   中英

帶有Restful Web Service的JavaFX2

[英]JavaFX2 with Restful Web Service

我開始嘗試JavaFX2.2向RESTful Web服務發出請求。 要創建我的Web服務,我遵循了NetBeans指南: http : //netbeans.org/kb/docs/websvc/rest.html (基於我的數據庫)。

實體,配置和服務包已成功生成,當我通過右鍵單擊項目並選擇“測試RESTful Web服務...”來測試服務時,一切似乎都可以正常工作(獲取XML響應)

現在,我嘗試創建一個JavaFX2應用程序,該應用程序對此Web服務發出請求。 為此,我使用了基於DAPFacadeREST服務的Jersey客戶端(也由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可以使用代理類,但是在服務器端(JavaEE 6)尚不知道SimpleIntegerProperty。 這就是為什么我要使用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”只是一個普通的String,我希望它在我的客戶端成為一個SimpleStringProperty。

我已經在JAXB上進行了一些閱讀,但是沒有得到應該在客戶端創建的內容以及在服務器端創建的內容的圖片。 如果我沒有記錯的話,我必須在某個地方制作一個xsd文件嗎? 但是,這會再次支持SimpleStringProperty作為類型嗎?

抱歉,冗長的帖子,但我希望有人能幫助我...預先感謝。

您可以創建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批注用於配置XmlAdapter您可以使用package-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.*; 

欲獲得更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM