więc mam prostą usługę internetową:JAX-WS: Jak odpowiedź SOAP zwrócić obiekt HashMap
@WebMethod(operationName="getBookList")
public HashMap<Integer,Book> getBookList()
{
HashMap<Integer, Book> books = new HashMap<Integer,Book>();
Book b1 = new Book(1,"title1");
Book b2 = new Book(2, "title2");
books.put(1, b1);
books.put(2, b2);
return books;
}
Klasa książka jest również prosta:
public class Book
{
private int id;
private String title;
public int getId()
{
return id;
}
public String getTitle()
{
return title;
}
public Book(int id, String title)
{
id = this.id;
title = this.title;
}
}
Teraz kiedy zadzwonić ten serwis internetowy w testerze przeglądarki, uzyskać:
Method returned
my.ws.HashMap : "[email protected]"
SOAP Request
...
...
SOAP Response
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getBookListResponse xmlns:ns2="http://ws.my/">
<return/>
</ns2:getBookListResponse>
</S:Body>
</S:Envelope>
Czy możliwe h ave wracającą HashMap obiekt pokazany na <return>
tagu, coś
<return>
<Book1>
id=1
title=title1
</Book1>
</return>
<return>
<Book2>
id=2
title=title2
</Book2>
</return>
powód, dla którego chcę wartości w tagach w obie strony jest dlatego, ze strony klienta, używam jQuery AJAX na stronie internetowej, aby nazwać usługa sieci Web, a otrzymywany przeze mnie kod odpowiedzi to po prostu puste tagi <return>
. Jak mogę uzyskać prawdziwą wartość książki od strony klienta AJAX?
Oto mój kod AJAX internetowej:
$.ajax({
url: myUrl, //the web service url
type: "POST",
dataType: "xml",
data: soapMessage, //the soap message.
complete: showMe,contentType: "text/xml; charset=\"utf-8\""
});
function showMe(xmlHttpRequest, status)
{ (xmlHttpRequest.responseXML).find('return').each(function()
{ // do something
}
}
testowałem z prostego Hello World usługi internetowej i to działało.
Odpowiedź brzmi "to zależy" :) Najlepiej jest odpalić swoje ulubione IDE (może Eclipse J2EE, może coś jeszcze), zakodować mały interfejs Java, nacisnąć przycisk "przekonwertuj na WSDL" ... i zobacz, co się stanie. Następnie, jeśli nie ma barf ... zobacz, czy wynikowy WSDL jest czymś, czego możesz użyć ze wszystkimi klientami (być może Axis, być może Axis2, być może .Net, może coś zupełnie innego). Powodzenia! – paulsm4
id = 1 - jest identyfikatorem z książki klasy lub Integer z HashMap? – Ilya
id jest z klasy. Nie wiem dokładnie, jak powinna wyglądać odpowiedź xml. ale chciałbym, aby te pola instancji w obiekcie książki były wyświetlane w tagach zwracanych. – neo