Реализация классов исключений XSD в веб-службе Spring (SOAP) - PullRequest
0 голосов
/ 19 февраля 2020

Я создаю SOAP веб-сервис в Spring Boot, используя Spring WS. Служба, которую я воссоздаю, является клоном Службы, работающей по более старой технологии, которая использует JavaX JWS, с классами, сгенерированными из XSD.

Проблемы, с которыми я столкнулся, действительно связаны: 1. Я могу ' Кажется, что он «получает» исключения, выданные в «новой» веб-службе обратно потребителю.
2. При запросе конечной точки в SOAPUI класс исключений для веб-службы выглядит так, как если бы это был односторонний метод.

Я считаю, что это потому, что Spring WS неправильно реализует / понимает классы исключений.

Когда в новом сервисе возникает исключение, потребитель получает com.sun.xml.internal.ws.fault.ServerSOAPFaultException, а не Исключение, выданное в веб-службе.

Исходный сервис JavaX возвращает (используя TestException в качестве примера):

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
         <faultcode>S:Server</faultcode>
         <faultstring>Test</faultstring>
         <detail>
            <ns2:TestException xmlns:ns2="http://test.co.uk/">
               <code>abc123</code>
               <message>Test</message>
            </ns2:TestException>
         </detail>
      </S:Fault>
   </S:Body>
</S:Envelope>

Я не могу найти какую-либо документацию или руководство о том, как Исключение должно быть построено / сконфигурировано для создания того же вложенного элемента <ns2>. Есть ли способ точно передать исключение обратно, чтобы оно выглядело так же, как в сервисе?

1 Ответ

1 голос
/ 19 февраля 2020

Вот несколько примеров реализации пользовательского распознавателя исключений, который расширяет AbstractEndpointExceptionResolver и определяет SOAP отображение сбоев для различных типов исключений: пример 1 , пример 2 , пример 3 .

...