【发布时间】:2014-01-21 21:27:44
【问题描述】:
我正在编写一个使用soap xml webservices 的客户端工具(使用CXF 从提供的wsdl 中自动生成类)。我想知道哪种设计最适合构建我想要发送到 Web 服务的 xml 请求。我的问题是要发送的请求必须由许多不同的部分/对象组成。我正在寻找一种简洁的方式来构建这些部分的创建,最终形成完整的请求。
请求可能会增长到 200-500 个 XML 行,因此在一个类中创建所有这些可能是个坏主意。
为了说明我的目标,假设一个请求需要一个 Person 对象,并且必须在该对象上设置一些参数,例如姓名、生日、地址等。我可以想到以下设计:
1) 返回构造的 xml 部分的静态实用程序
class XMLUtil {
public static PersonType createPerson(String name, String birthday, Address Address) {
//the xml person to send within the request
PersonType p = new PersonType();
p.setName(name);
p.setBirthday(birthday);
p.setAddress(address);
//assume some more params, but the concept is clear I hope
return p;
}
}
2) 将构造的 xml 部分添加到 xml 请求的静态实用程序
class XMLUtil {
public static void addPerson(WebserviceReq req, String name, String birthday, Address Address) {
//create person as above
req.addPerson(p);
}
}
3) 非静态服务
class XMLService {
private WebserviceReq req;
public XMLService(WebserviceReq req) {
this.req = req;
}
public void createPerson(String name, String birthday, Address Address) {
//create person as above
req.addPerson(p);
}
public WebserviceReq getWebserviceReq() {
return req;
}
}
用法:
1)
WebserviceReq req = new WebserviceReq();
req.addPerson(XMLUtil.createPerson("test", "2014-01-01", address));
req.send();
2)
WebserviceReq req = new WebserviceReq();
XMLUtil.addPerson(req, "test", "2014-01-01", address);
req.send();
3)
WebserviceReq req = new WebserviceReq();
XMLService service = new XMLService(req);
service.createPerson("test", "2014-01-01", address);
service.getWebserviceReq();
req.send();
如果不仅要为 xml 请求构建一个 person 对象,而且还有很多你试图以某种方式封装的部分,那么你会更喜欢哪种方法?
【问题讨论】:
标签: java xml web-services soap