Così ho un semplice servizio web:JAX-WS: come dare una risposta SOAP restituisce un oggetto 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;
}
La classe libro è anche semplice:
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;
}
}
Ora quando si chiama questo servizio nella tester del browser, ottengo:
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>
E 'possibile h ave restituita HashMap oggetto mostrato in <return>
tag, qualcosa come
<return>
<Book1>
id=1
title=title1
</Book1>
</return>
<return>
<Book2>
id=2
title=title2
</Book2>
</return>
La ragione per cui voglio i valori nei tag di ritorno è perché, dal lato client, sto usando jQuery AJAX in una pagina web per chiamare questo servizio web, e la risposta XML che sto ottenendo è solo tag <return>
vuoto. Come faccio a ottenere il valore reale del libro dal lato client AJAX?
Ecco il mio codice AJAX web:
$.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
}
}
ho provato con semplice servizio web ciao mondo e ha funzionato.
La risposta è "dipende" :) La soluzione migliore è lanciare il tuo IDE preferito (forse Eclipse J2EE, forse qualcos'altro), creare una piccola interfaccia Java, premere il pulsante "converti in WSDL" ... e vedi cosa succede Quindi, se non funziona, vedi se il WSDL risultante è qualcosa che puoi usare con tutti i tuoi client (forse Axis, forse Axis2, forse .Net, forse qualcos'altro interamente). In bocca al lupo! – paulsm4
id = 1 - ID del class book o Integer di HashMap? L'ID – Ilya
proviene dal libro di classe. Non so esattamente come dovrebbe essere la risposta xml. ma mi piacerebbe che quei campi di istanza nell'oggetto del libro fossero mostrati nei tag di ritorno. – neo