【问题标题】:SOAP UI HTTP Request Vs Apache CXFSOAP UI HTTP 请求与 Apache CXF
【发布时间】:2014-12-17 22:41:16
【问题描述】:

我在实现 Web 服务客户端时遇到了一个奇怪的情况。 SOAP UI 发出的请求成功,HTTP 请求如下:

 POST http://xxxxxxxxxx/xx/xx/xxxxx/xxxxx HTTP/1.1
 Accept-Encoding: gzip,deflate
 Content-Type: text/xml;charset=UTF-8
 SOAPAction: "CreateUserSoap"
 Content-Length: 1490
 Host: xxxxxxxxxxxxxxxxxxx.net
 Connection: Keep-Alive
 User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
 Cookie: SMCHALLENGE=YES
 Cookie2: $Version=1
 Authorization: Basic ZHFhbgfdd6RFFQcdfgdm9vccQ=
 <soap........./>

但是,当我从应用程序触发 Web 服务请求时,我在生成 HHTP 请求后使用 apace cxf 并收到 403:Forbidden 错误

ID: 1
Address: http://xxxxxxxxxx/xx/xx/xxxxx/xxxxx
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml
Headers: {Accept=[*/*], Authorization=[Basic ZHFhbgfdd6RFFQcdfgdm9vccQ=], SOAPAction=    ["CreateUserSoap"]}
Payload: <soap....... />

我不确定 apache - cxf 是否按照服务器的预期生成正确的 http 标头。两种情况下的肥皂信封都是一样的。

下面是实现java客户端的代码:

    ClientWs clientWS= new ClientWs ();
    ClientWSPortType portType = clientWS.getClientWSPort();
    BindingProvider provider = (BindingProvider) portType;

    Header dummyHeader = new Header(new QName("http://clientWS/wsdl", "ClientWS"), documentBuilder.parse(new ByteArrayInputStream(xmlString2.getBytes("UTF-8"))).getDocumentElement() ); --parsing the soap mesage
    headers.add(dummyHeader);
    provider.getRequestContext().put(Header.HEADER_LIST, headers);

    provider.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, user_name);
    provider.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, pass_word);

【问题讨论】:

    标签: java web-services jakarta-ee jboss cxf


    【解决方案1】:

    好吧,没有人知道我也不能用 Apache CXF 做到这一点。 转机是使用核心 java HttpURLConnection 来实现这一点。

    类似这样的方法帮助原因广告在没有任何框架的情况下发布 Web 服务调用。:

    public HttpURLConnection getHttpConn(String webservice_url) throws IOException {
    URL endpoint = new URL(webservice_url);
    URLConnection connection = endpoint.openConnection();
    HttpURLConnection httpConn = (HttpURLConnection) connection;
    byte[] encodedBytes = Base64.encodeBase64((getUsername()+":"+getPassword()).getBytes());
    httpConn.setRequestMethod(getRequestMethod());
    httpConn.setRequestProperty(HTTP_ACCEPT_ENCODING, getAccept_Encoding());
    httpConn.setRequestProperty(HTTP_CONTENT_TYPE, getContentType());
    httpConn.setRequestProperty(getContent_Length(), getContent_Length());
    httpConn.setRequestProperty(HTTP_HOST, getHost());
    httpConn.setRequestProperty(getConnection(), getConnection());
    httpConn.setRequestProperty(HTTP_COOKIE2, getCookie2());
    httpConn.setRequestProperty(HTTP_COOKIE, getCookie());
    httpConn.setRequestProperty("Authorization", "Basic "+new String(encodedBytes));
    httpConn.setDoOutput(true);
    httpConn.setDoInput(true);
    return httpConn;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多