Кто-нибудь знает хитрость вызова веб-службы WCF (Soap 1.2) из CXF?
Я уже некоторое время пытаюсь заставить базового клиента hello world работать, и мне не повезло.
Отлично работает с Soap 1.1.
Когда я распечатываю SoapBinding, клиент использует его, используя soap 1.1, даже если это сервис soap 1.2
когда я устанавливаю привязку мыла вручную к 1.2, она зависает при вызове веб-службы и в конечном итоге умирает с исключением времени ожидания сокета (тайм-аут чтения).
public static void main(String[] args) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(ITest.class);
factory.setAddress("http://localhost/Test/test.svc");
final Soap12 soap12 = Soap12.getInstance();
BindingConfiguration config = new BindingConfiguration() {
@Override
public String getBindingId() {
return soap12.getBindingId();
}
};
factory.setBindingConfig(config);
factory.setBindingId(soap12.getBindingId());
ITest service = (ITest) factory.create();
org.apache.cxf.endpoint.Client client = ClientProxy.getClient(service);
client.getRequestContext().put("ContentType", "text/xml; charset=utf-8");
SoapBinding binding = (SoapBinding) client.getEndpoint().getBinding();
System.out.println("[" + binding.getSoapVersion() + "]");
System.out.println(service.test("World"));
}
Это запрос мыла, который отправляется в службу WCF.
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<Test xmlns="http://tempuri.org/" xmlns:ns2="http://schemas.microsoft.com/2003/10/Serialization/">
<s>World</s>
</Test>
</soap:Body>
</soap:Envelope>