所以我有一个简单的Web服务:
@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客户端获得真实的账面价值?
这是我的AJAX网络代码:
$.ajax({
url: myUrl, //the html" target="_blank">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
。有几种方法可以做到这一点,所以我建议您检查一下
问题内容: 目标 我正在为相当老的(但可悲的是不可更改)的接口实现Web服务。我有一个问题,正在调用我的服务的客户端期望SOAP响应中有某个命名空间,而我很难更改它以使其匹配。 考虑一个世界的例子,我想要这样: 看起来像这样: 我在这里找到了与尝试执行的操作类似的操作,但是在使相似的代码正确执行方面遇到困难。(我想坚持使用Metro,而不必更改为cxf或axis) 执行 我的实现返回如下所示: 该
各位议员好。 背景信息:这是一个基于Spring Boot的项目,它使用JAX-RS/Jersey作为RESTHTTP服务器,而不是spring rest。 错误说明和问题: 将一个文件从一台服务器发送到另一台服务器,并收到响应。(很简单吧?)从功能上讲,下面的代码正在运行。但是,发送方得到的不是200响应,而是500个内部服务器错误和以下堆栈跟踪。 调试之后,我注意到响应中包含了receiver
我正在为一个相当旧(但遗憾的是无法更改)的接口实现一个web服务。我遇到了一个问题,即调用我的服务的客户端需要SOAP响应中的某个命名空间,而我很难将其更改为匹配。 考虑一个hello world示例,我希望这样: 看起来像这样: 我发现了一些类似于我在这里尝试做的事情,但我很难正确执行类似的代码。(我想继续使用Metro,而不必更换cxf或axis) 我的返回< code > jaxbconte
问题内容: 我正在尝试创建一个独立的客户端来使用某些Web服务。我必须将我的用户名和密码添加到SOAP Header。我尝试添加凭据,如下所示: 当我在服务上调用方法时,出现以下异常: 我究竟做错了什么?如何将这些属性添加到SOAP Header? 编辑:我正在使用JDK6中包含的JAX-WS 2.1。我现在正在使用JAX-WS 2.2。我现在得到以下异常: 如何创建此令牌? 问题答案: 不是10
问题内容: 调用JAX-WS端点时,如何获取HTTP响应代码? 在下面的示例代码中,在调用Web服务时可能会引发Exception,例如或。 在这种情况下,如何从HTTP响应中获取HTTP状态代码? 问题答案: 完成@Praveen答案后,您必须将变成原始值,然后从上下文中获取值。 如果您在托管的Web服务客户端中发生异常,请不要忘记将事务标记为回滚。
问题内容: 是否有一种简单的方法(即:不使用代理)来访问对使用JAX-WS参考实现(JDK 1.5及更高版本中包含的参考发布)发布的Web服务的原始请求/响应XML的访问?我需要做的是通过代码做到这一点。仅通过巧妙的日志记录配置将其记录到文件中就可以了,但足够了。 我知道可能存在其他更复杂和完整的框架,但是我想使其尽可能地简单,而axis,cxf等都增加了我想避免的大量开销。 谢谢! 问题答案: