使用AXIS1.4访问web Service问题
对方的webservice提供了wsdl文件,还提供了licenseXml,文档中说是SOAP消息的传入格式:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<AuthenticationToken xmlns="bookService">
<Username>…</Username>
<Password>…</Password>
<licenseXml>…</licenseXml>
</AuthenticationToken>
</soap:Header>
<soap:Body>
…
</soap:Body>
</soap:Envelope>
我自己做了一个WebService来做测试(写了一个ws 服务端,同wsdl2java.bat的方法做了一个ws 客户端)
我通过wsdl2java.bat文件生成相关代码,命令格式为:
wsdl2java -uri http://localhost:8080/test/services/BookService?wsdl -p demo.test -d adb -s -o d:\data
测试代码服务端实现类的代码如下:
package org.codehaus.xfire.demo;
import java.util.HashMap;
import java.util.Map;
/**
* @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
* @author <a href="mailto:nathanyp@hotmail.com">Nathan Peles</a>
*/
//START SNIPPET: book
public class BookServiceImpl implements BookService
{
private Book onlyBook;
private Book twoBook;
public BookServiceImpl()
{
onlyBook = new Book();
onlyBook.setAuthor("Dan Diephouse");
onlyBook.setTitle("Using XFire");
onlyBook.setIsbn("0123456789");
twoBook = new Book();
twoBook.setAuthor("zhangweihua");
twoBook.setTitle("Study Web Service");
twoBook.setIsbn("2222222");
}
public Book[] getBooks()
{
return new Book[] { onlyBook, twoBook };
}
public Book findBook(String isbn) throws BookException
{
if (isbn.equals(onlyBook.getIsbn())){
return onlyBook;
}else if(isbn.equals(twoBook.getIsbn())){
return twoBook;
}
throw new BookException("Book not exists",new BookExceptionDetail("NOT_EXIST","Can't find book"));
}
public Map getBooksMap() {
Map result = new HashMap();
result.put(onlyBook.getIsbn(), onlyBook);
return result;
}
}
测试代码客户端代码如下:
package demo.test;
public class BookServiceClient {
public static void main(java.lang.String args[]){
try{
BookServiceStub stub =
new BookServiceStub
("http://localhost:8087/xfire/services/BookService");
getBooks(stub);
findBook(stub);
} catch(Exception e){
e.printStackTrace();
}
}
/* two way call/receive */
public static void getBooks(BookServiceStub stub){
try{
BookServiceStub.GetBooks req = new BookServiceStub.GetBooks();
BookServiceStub.GetBooksResponse res = stub.getBooks(req);
System.out.println(res.getOut());
BookServiceStub.ArrayOfBook bookArray = res.getOut();
for(int i = 0; i < bookArray.localBook.length; i++){
BookServiceStub.Book book = bookArray.localBook[i];
System.out.println("i=" + i + " Title=" + book.getTitle());
}
} catch(Exception e){
e.printStackTrace();
System.err.println("\n\n\n");
}
}
public static void findBook(BookServiceStub stub){
try{
BookServiceStub.FindBook req = new BookServiceStub.FindBook();
req.setIn0("2222222");
BookServiceStub.FindBookResponse res = stub.findBook(req);
System.out.println(res.getOut());
//BookServiceStub.ArrayOfBook bookArray = res.getOut();
BookServiceStub.Book book = res.getOut();
if(book != null){
System.out.println("have found book:" + book.getTitle());
}
} catch(Exception e){
e.printStackTrace();
System.err.println("\n\n\n");
}
}
}
这个测试能够通过,但是用户给到的要用licenseXml,不知道用这种方法如何使用licenseXml?请高手们指点一下!谢谢!