Кастомизация мыльного ответа - PullRequest
0 голосов
/ 15 февраля 2019

Я работаю над проектом веб-сервисов с Apache CXF.Я не хочу обрабатывать исключения и настраивать ответ:

public class FaultInterceptor extends
AbstractSoapInterceptor {

public FaultInterceptor() {
    super(Phase.MARSHAL);
}
public void handleMessage(SoapMessage soapMessage) throws Fault {
Fault fault = (Fault) soapMessage.getContent(Exception.class);
QName faultCode = new QName("11111");
fault.setFaultCode(faultCode);

Итак, вот что я получу в ответе:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
  <soap:Fault>
     <faultcode>soap:11111</faultcode>
     <faultstring>Message</faultstring>
  </soap:Fault>
 </soap:Body>

Как мне удалитьтекст "мыло:" и пусть только 11111?

Пожалуйста, помогите мне и заранее спасибо

1 Ответ

0 голосов
/ 17 февраля 2019

Чтобы настроить ответ SOAP, вы можете реализовать один из следующих способов:

- РЕДАКТИРОВАТЬ 2019-02-20 -

Согласно Javadoc (и спецификации SOAP),код ошибки должен иметь вид «prefix: localname», где «prefix» - это префикс объявленного пространства имен XML в вашем XML, или вы можете не иметь префикса, который вам нужен, если он объявлен как пространство имен по умолчанию, например, с помощью xmlns="my-custom-faultcode-namespace-uri" где-то, например, в мыле: элемент конверта.Поэтому один из способов - не уверен, что это самый простой, но совместимый со стандартом SOAP - состоит в следующем:

1) Создайте свое собственное пространство имен для этого кода ошибки

2) Попробуйте изменить QName на пустоестрока как префикс пространства имен:

QName faultCode = new QName("my-custom-faultcode-namespace-uri", "11111", "");

Если этого недостаточно (я бы удивился, это так просто), вы можете заставить CXF использовать ваше пространство имен по умолчанию (без префикса).Согласно этой записи , чтобы настроить пространства имен и префиксы на мыльном конверте в CXF, вы изменяете карту в свойстве jaxws 'soap.env.ns.map'.

...