Я использовал maven wsimport, а Java 1.7 сгенерировала код клиентской стороны SOAP. WSDL был предоставлен заказчиком, я считаю, что это сервер SOAP, поддерживаемый .NET.
После вызова службы я все время получаю сообщение об ошибке:
Сервер отправил код состояния HTTP 415: сообщение невозможно обработать, поскольку тип содержимого «application / soap + xml; charset = utf-8; не был ожидаемым типом 'text / xml; charset = utf-8 '.
Я пытаюсь изменить MimeHeader в классе SOAPMessage с помощью настраиваемого обработчика (и я правильно зарегистрировал обработчик в цепочке):
MimeHeaders mimeHeaders = msg.getMimeHeaders();
mimeHeaders.removeAllHeaders();
mimeHeaders.removeHeader("Content-Type");
mimeHeaders.addHeader(HttpHeaders.CONTENT_TYPE, "text/xml; charset=utf-8");
приведенный выше код, кажется, ничего не меняет внутри mimiHeaders, векторный объект кажется неизменным ....
затем я создал сообщение SOAP вручную
MessageFactory newInstance = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
MimeHeaders he = new MimeHeaders();
he.addHeader("Content-Type", "text/xml; charset=utf-8");
String ss = "<x:Envelope>xxxxx</x:Envelope>";
InputStream in = new ByteArrayInputStream(ss.getBytes(StandardCharsets.UTF_8));
SOAPMessage createMessage = newInstance.createMessage(he, in);
createMessage.writeTo(System.out);
context.setMessage(createMessage);
msg.saveChanges();
на этот раз mimeHeader и Content-Type в самом SOAPMessage установлены как text / xml; charset = utf-8
но на сервере все равно через ту же ошибку 415 application / soap + xml не ожидается ......
Я понимаю, что сервер, похоже, следует за SOAP 1.1, поэтому он ожидает text / xml ... но когда я создал фабрику, я четко указал протокол на 1.1 и вручную установил mimeHeader. Я действительно запутался
Примечание: использование SOAPUI или PostMan абсолютно нормально, проблема возникает только при использовании java-клиента, созданного wsimport.