В настоящее время у меня проблема с кодами ошибок и сообщениями, использующими Spring WS.
Для удобства мы используем Spring WS 2.0 с привязкой JAXB2 и аннотациями @Endpoint и @PayloadRoot.
Наша конечная точка выглядит следующим образом:
@Endpoint
public class MyEndpoint() {
private static final String MY_NAMESPACE=...;
@PayloadRoot(namespace=MY_NAMESPACE, localPart="myPart")
public MyPartResponse handleMyPart(MyPart myPart) {
....
}
}
Мы используем мыло только в качестве тонкой обертки вокруг сообщения POX, определенного в XSD. Это также означает, что мы используем коды возврата и сообщения вместо ошибок.
Каждый ответ наследуется от
<xs:complexType name="ResultBase">
<xs:sequence>
<xs:element name="errorCode" type="tns:ErrorCode" />
<xs:element name="errorMessage" type="xs:string" />
</xs:sequence>
</xs:complexType>
и добавляет некоторые особенности в случае успеха, например:
<xs:element name="MySpecificResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="tns:ResultBase">
<xs:sequence>
<xs:element name="mySpecificElement" type="tns:MySpecificType" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
Все исключения, создаваемые в методе handleMyPart , могут быть четко отображены.
Однако два типа ошибок остаются необработанными и генерируют ошибки вместо четкого сообщения об ошибке:
- Ошибки проверки XSD
- Неправильные ошибки XML
В конце концов, это проблемы, которые относятся к каждому веб-сервису POX, использующему Spring WS . Как перехватить эти исключения и отобразить их на объект ответа?
Помните: все объекты ответа немного отличаются , поскольку все они наследуются от общего, но добавляют к нему некоторый уникальный необязательный контент.