簡體   English   中英

SOAP UI HTTP請求與Apache CXF

[英]SOAP UI HTTP Request Vs Apache CXF

實現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服務請求時,針對該應用程序,我使用apace cxf生成HHTP請求,並收到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);

好吧,沒人能用Apache CXF做到這一點。 解決方法是使用核心java HttpURLConnection實現此目的。

這樣的方法可以幫助原因廣告發布沒有任何框架的網絡服務調用。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM