.
- Apache CXF -, HTTP
307, .
- soapUI Follow Redirects, true, .
, , JAX-WS .
, , , , :
:
public class MyWebServiceClient extends javax.xml.ws.Service {
private final QName portName = "...";
public RetrieveMyObjects getRetrieveMyObjects() {
return super.getPort(portName, RetrieveMyObject.class);
}
}
public interface RetrieveMyObjects {
List<MyObject> getAll();
}
, :
MyWebServiceClient wsClient = new MyWebServiceClient("wsdl/location/url/here.wsdl");
RetrieveMyObjectsPort retrieveMyObjectsPort = wsClient.getRetrieveMyObjects();
wsClient , RetrieveMyObjects javax.xml.ws.BindingProvider . JAX-WS, , . , - :
if(!(retrieveMyObjectsPort instanceof javax.xml.ws.BindingProvider)) {
throw new RuntimeException("retrieveMyObjectsPort is not instance of " + BindingProvider.class + ". Redirect following as well as authentication is not possible");
}
, , retrieveMyObjectsPort javax.xml.ws.BindingProvider, HTTP- POST, SOAP ( , , didn Google) , - :
private static void checkRedirect(final Logger logger, final BindingProvider bindingProvider) {
try {
final URL url = new URL((String) bindingProvider.getRequestContext().get(ENDPOINT_ADDRESS_PROPERTY));
logger.trace("Checking WS redirect: sending plain POST request to {}", url);
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setInstanceFollowRedirects(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "text/html; charset='UTF-8'");
connection.setDoOutput(true);
if(connection.getResponseCode() == 307) {
final String redirectToUrl = connection.getHeaderField("location");
logger.trace("Checking WS redirect: setting new endpoint url, plain POST request was redirected with status {} to {}", connection.getResponseCode(), redirectToUrl);
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, redirectToUrl);
}
} catch(final Exception e) {
logger.warn("Checking WS redirect: failed", e);
}
}
checkRedirect(logger, (BindingProvider) retrieveMyObjectsPort);
, : BindingProvider.ENDPOINT_ACCESS_PROPERTY of retrieveMyObjectsPort, URL-, SOAP HTTP- POST, . , 307 - Temporary Redirect ( , 302 301), , URL-, -, .
checkRedirect -, :
- URL-,
http://example.com:50678/restOfUrl - - url
https://example.com:43578/restOfUrl ( , -) - URL - -, .
: -, , - , , , , - .
,