Я пытаюсь подключиться к WS, который требует от меня указать указанное c имя хоста во время подключения. Я пытаюсь добиться этого, используя JAX-WS и Apache CXF, но до сих пор мне не удалось.
Я могу получить доступ к конечной точке, используя CURL
curl -v -H 'Host: myHost' http://.../endpoint.jws?wsdl
Проблема здесь в том, что мне нужно предоставлять параметр host
всякий раз, когда я пытаюсь получить доступ к WSDL.
Это то, что я пробовал до сих пор:
final URL wsdlLocation = URI.create("http://.../endpoint.jws?wsdl").toURL();
log.info("URL : {}", wsdlLocation.toString());
HttpURLConnection cnx = (HttpURLConnection) wsdlLocation.openConnection();
cnx.setRequestProperty("Host", "myHost");
PNMService pnmService = new PNMService(wsdlLocation);
pnmPortType = pnmService.getPNMPort();
И PNMService
класс:
@WebServiceClient(name = "PNMService", targetNamespace = "http://www.myhost.com/pnm/service", wsdlLocation = "${pnm.wsdl.url}")
public class PNMService extends Service {
private static final QName PNMSERVICE_QNAME = new QName("http://www.myhost.com/pnm/service", "PNMService");
PNMService (URL wsdlLocation) {
super(wsdlLocation, PNMSERVICE_QNAME);
}
/**
* @return returns PNMPortType
*/
@WebEndpoint(name = "PNMPort")
PNMPortType getPNMPort () {
return super.getPort(new QName("http://www.myhost.com/pnm/service", "PNMPort"), PNMPortType.class);
}
}
И каждый раз, когда ошибка одинакова:
Caused by: java.io.IOException: Server returned HTTP response code: 503 for URL: http://.../endpoint.jws?wsdl
Один и тот же URL-адрес доступен командой CURL (и без имени хоста CURL также выдает мне ту же ошибку 503.)
Я перепробовал все, что описано во всех этих вопросах (включая подход к системным свойствам):
И, как показывают комментарии в этих ответах, у меня в помпе cxf-rt-frontend-jaxrs
cxf-rt-frontend-jaxws
и cxf-rt-transports-http
, и я вижу, как вызывается CXF
org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
Но пока мне не повезло. Может кто-нибудь, пожалуйста, помогите мне понять, что я делаю здесь не так?