我开始尝试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>[email protected]</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.*;
欲获得更多信息