当前位置: 首页 > 知识库问答 >
问题:

JAX-WS调度请求设置内容类型

缪远
2023-03-14

我试图使用服务/调度机制发布一个JAX-RS资源。问题是传出请求的内容类型被锁定为text/xml。我看不出有什么方法可以将其更改为其他类型,例如application/xml

RESTful webservice只使用Application/xmlApplication/json。这是我使用的代码:

public static void main(String[] args) {
    QName qName = new QName("GREETINGS");

    Service service = Service.create(qName);
    service.addPort(qName, HTTPBinding.HTTP_BINDING, "http://localhost:8081/gf-ws-1/resources/greetings");

    // change headers of the outgoing request
    Map<String, Object> headers = new HashMap<String, Object>();
    headers.put("Content-Type", Arrays.asList(new String[] {"application/xml"}));
    headers.put("Accept", Arrays.asList(new String[] {"zoo"}));
    headers.put("foo", Arrays.asList(new String[] {"bar"}));

    Dispatch<Source> dispatch = service.createDispatch(qName, Source.class, Service.Mode.PAYLOAD);
    dispatch.getRequestContext().put(MessageContext.HTTP_REQUEST_METHOD, "POST");
    dispatch.getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS, headers);

    dispatch.invokeOneWay(new StreamSource(new StringReader("<?xml version='1.0' encoding='UTF-8'?><greeting><value>Hello World!</value></greeting>")));

    // get the response code: [HTTP/1.1 415 Unsupported Media Type] because of content type
    System.out.println(((Map<String, Object>) dispatch.getResponseContext().get(MessageContext.HTTP_RESPONSE_HEADERS)).get(null));
}

接受标头被修改为zoo标头,foo标头添加了值,但Content-Type保持不变。我想我可以使用一个过滤器,并根据一些条件修改Content-Type,甚至基于foo头,但这似乎违反直觉。

以下是请求的所有标题:

POST /gf-ws-1/resources/greetings HTTP/1.1
Accept: zoo
Content-Type: text/xml
foo: bar
User-Agent: Metro/2.2.0-1 (tags/2.2.0u1-7139; 2012-06-02T10:55:19+0000) JAXWS-RI/2.2.6-2 JAXWS/2.2 svn-revision#unknown
Host: localhost:8080
Connection: keep-alive
Content-Length: 86

感谢您的帮助。

共有1个答案

徐皓君
2023-03-14

您必须使用Service。模式。信息而不是服务。模式。PAYLOAD如果您想自定义整个消息。

内容类型是与消息相关的属性。

 类似资料:
  • 我正在使用npm“同构获取”发送请求。我遇到的问题是无法设置请求头的内容类型。 我将内容类型设置为application/json,但是请求头被设置为text/plain。 当我在浏览器中检查请求时,内容类型为o: 有人能解释为什么我不能设置这个属性吗?

  • JAX-WS (JavaTM API for XML-Based Web Services)规范是一组XML web services的JAVA API。JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services。 在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要

  • 问题内容: 我有一个基于的Spring Webservice 。该服务工作正常,除了我的客户端需要将HTTP标头设置为正确的字符集(本例中为utf-8)。我找不到我可以配置的位置。 我尝试编写一个简单的servlet : 但这根本不会改变标题。我怀疑内容类型标头是由Spring-WS设置的,并且响应已提交,因此我在过滤器中设置的内容都不会产生影响。 我的应用服务器是WebLogic 9.2.3。

  • 问题内容: 是否有一种简单的方法(即:不使用代理)来访问对使用JAX-WS参考实现(JDK 1.5及更高版本中包含的参考发布)发布的Web服务的原始请求/响应XML的访问?我需要做的是通过代码做到这一点。仅通过巧妙的日志记录配置将其记录到文件中就可以了,但足够了。 我知道可能存在其他更复杂和完整的框架,但是我想使其尽可能地简单,而axis,cxf等都增加了我想避免的大量开销。 谢谢! 问题答案:

  • 我编写了一个javajax-ws-web服务。我用了这个教程 实现后,我在本地tomcat上部署了我的网络服务。但是我在网站上只得到以下文本: 404 Nicht gefunden:请求无效 有人能解决这样的问题吗?

  • 问题内容: 我有一个简单的命令行Java JAX-WS应用程序来测试SOAP请求,但是服务器期望密码类型为PasswordText,而我对如何设置此密码感到困惑… 代码如下所示: 我已经使用SOAP-UI测试了请求,所以我知道它正在工作。任何帮助设置密码类型将不胜感激。 谢谢。 问题答案: 这将设置基本HTTP身份验证的用户名和密码。如果您已经在SoapUI中对其进行了测试,那么我猜您在请求详细信