Java Web 服务: Axis2 中的 JAXB 和 JAX-WS
2009-11-05 00:00:00 来源:WEB开发网WsImport 工具将附带的 WSDL 识别为匹配 “封装的” 约定,并自动生成一个未封装的服务接口。您可以从 清单 5 中看到效果,在此过程中,方法将单独的值作为输入参数,并直接返回任何合适的类型,而不是使用一个封装器对象层(但是仍然将生成封装器对象,然后供 JAX-WS 运行时在幕后使用)。
附带的代码再一次给出了服务和测试客户机的实际实现。要亲自尝试,您需要对附带的 build.properties 文件进行编辑,以设置到 Axis2 安装和 JAX-WS 参考实现安装的路径。完成编辑后,在打开到 jaxws 目录的控制台中输入 ant 以从 WSDL 运行 JAX-WS 代码生成,编译附带的代码,并为服务器部署构建一个 JAR 文件。要运行测试客户机,将生成的 JAR 文件复制到 Axis2 服务器安装的 WEB-INF/servicejars 目录中,然后在控制台中输入 ant run。
客户端 JAX-WS 使用
清单 6 展示了完整的测试客户机代码。如果将其与 清单 2 比较,您将观察到未封装接口和已封装接口之间的不同,其中未封装接口具有更好的编程友好性。
清单 6. JAX-WS 测试客户机代码public class WebServiceClient
{
public static void main(String[] args) throws Exception {
// check for required command line parameters
if (args.length < 3) {
System.out.println("Usage:\n java " +
"com.sosnoski.ws.library.jaxws.WebServiceClient host port path");
System.exit(1);
}
// create the client stub
JaxwsLibrary service = new JaxwsLibrary();
Library stub = service.getLibrary();
// set the actual endpoint address
String target = "http://" + args[0] + ":" + args[1] + args[2];
System.out.println("Connecting to " + target);
BindingProvider provider = (BindingProvider)stub;
provider.getRequestContext().
put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, target);
// retrieve a book directly
String isbn = "0061020052";
BookInformation book = stub.getBook(isbn);
if (book == null) {
System.out.println("No book found with ISBN '" + isbn + '\'');
} else {
System.out.println("Retrieved '" + book.getTitle() + '\'');
}
// retrieve the list of types defined
List<TypeInformation> types = stub.getTypes();
System.out.println("Retrieved " + types.size() + " types:");
for (int i = 0; i < types.size(); i++) {
TypeInformation type = types.get(i);
System.out.println(" '" + type.getName() + "' with " +
type.getCount() + " books");
}
// add a new book
String title = "The Dragon Never Sleeps";
isbn = "0445203498";
try {
List<String> authors = new ArrayList<String>();
authors.add("Cook, Glen");
stub.addBook("scifi", isbn, authors, title);
System.out.println("Added '" + title + '\'');
title = "This Should Not Work";
stub.addBook("scifi", isbn, authors, title);
System.out.println("Added duplicate book - should not happen!");
} catch (AddDuplicateFault e) {
System.out.println("Failed adding '" + title +
"' with ISBN '" + isbn + "' - matches existing title '" +
e.getFaultInfo().getBook().getTitle() + '\'');
}
// get all books of a type
List<BookInformation> books = stub.getBooksByType("scifi");
System.out.println("Retrieved " + books.size() + " books of type 'scifi':");
for (int i = 0; i < books.size(); i++) {
System.out.println(" '" + books.get(i).getTitle() + '\'');
}
}
}
更多精彩
赞助商链接