jquery - JAX-WS:如何使 SOAP 响应返回 HashMap 对象

标签 jquery ajax web-services soap jax-ws

所以我有一个简单的网络服务:

    @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;
    }

书本类也很简单:

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;
    }
}

现在,当您在浏览器的测试器中调用此 Web 服务时,我得到:

Method returned
my.ws.HashMap : "my.ws.HashMap@1f3cf5b"

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>


是否可以让返回的HashMap对象显示在<return>中标签,类似

<return>
     <Book1>
          id=1
          title=title1
     </Book1>
</return>
<return>
     <Book2>
          id=2
          title=title2
     </Book2>
</return>

我想要返回标签中的值的原因是,从客户端来看,我在网页中使用 jQuery AJAX 来调用此 Web 服务,而我得到的响应 XML 只是空 <return>标签。我如何从 AJAX 客户端获取真实的账面值(value)?

这是我的 AJAX 网络代码:

   $.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
   }
}

我使用简单的 hello world Web 服务进行了测试,它有效。

最佳答案

为了帮助 JAXB,您可以将 HashMap '包装'在一个类中,并使用 @XmlJavaTypeAdapter 将映射自定义序列化为 XML。

public class Response {

    @XmlJavaTypeAdapter(MapAdapter.class)    
    HashMap<Integer, Book> books;

    public HashMap<Integer, Book> getBooks() {
        return mapProperty;
    }

    public void setBooks(HashMap<Integer, Book> map) {
        this.mapProperty = map;
    }

}

然后使用此类作为 WebMethod 的返回值

@WebMethod(operationName="getBookList")
    public Response 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);
         Response resp = new Response();
         resp.setBooks(books);
         return resp;
    }

毕竟,您需要实现适配器MapAdapter。有多种方法可以做到这一点,所以我建议您检查this

关于jquery - JAX-WS:如何使 SOAP 响应返回 HashMap 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11107875/

相关文章:

java - Unix 中的 Web 服务。目录结构应该是什么样的

javascript - 为什么在我的 AJAX 调用中,response.chartAt(0) 返回未定义?

c# - 将日期时间转换为 JSON 日期时间

javascript - 修改导航中的jQuery滑动下划线

jquery - 如何确定由谷歌发布商标签呈现的广告

javascript - 如何在回调函数中正确访问数组值?

java - 使用 Ajax 从 Servlet 中的 doGet 获取参数

java - 将动态 BufferedImage 流式传输到网站

javascript - 打开 Bootstrap 模式弹出窗口时防止加载其他类

javascript - 如何设置 img 标签的 src?