
Sprawdzanie poprawności dokumentu XML
Do sprawdzania poprawności dokumentów XML i obiektów biznesowych służy usługa sprawdzania poprawności.
Dodatkowo inne usługi wymagają spełnienia pewnych minimalnych standardów, w przeciwnym razie zgłaszają wyjątek w czasie wykonywania. Jedną z nich jest usługa BOXMLSerializer.
Usługa BOXMLSerializer służy do sprawdzania poprawności dokumentów XML, zanim zostaną przetworzone przez żądanie usługi. Usługa BOXMLSerializer sprawdza poprawność struktury dokumentów
XML i określa, czy występuje jeden z następujących typów błędów:
- Niepoprawne dokumenty XML, na przykład takie, w których brakuje pewnych znaczników elementów.
- Niepoprawnie uformowane dokumenty XML, na przykład takie, w których brakuje znaczników zamykających.
- Dokumenty zawierające błędy analizowania, takie jak błędy w deklaracjach obiektów.
Sprawdzanie poprawności można wykonać dla eksportu i/lub importu dokumentów XML przez następujące usługi:
- HTTP
- Usługi WWW JAXRPC
- Usługi WWW JAX-WS
- Usługi JMS
- Usługi MQ
W przypadku usług HTTP, JAXRPC i JAX-WS usługa BOXMLSerializer generuje wyjątki
w następujący sposób:
- Importy -
- Komponent SCA wywołuje usługę.
- Usługa wywołuje docelowy adres URL.
- Docelowy adres URL odpowiada zgłoszeniem wyjątku o niepoprawnym pliku XML.
- Usługa nie powiodła się, zwraca wyjątek w czasie wykonywania i komunikat.
- Eksporty -
- Klient usługi wywołuje eksport usługi.
- Klient usługi wysyła niepoprawny plik XML.
- Eksport dla usługi kończy się niepowodzeniem oraz generuje wyjątek i komunikat.
W przypadku usług przesyłania komunikatów JMS i MQ wyjątki są generowane w następujący sposób:
- Importy -
- Import wywołuje usługę JMS lub MQ.
- Usługa zwraca odpowiedź.
- Usługa zwraca wyjątek o niepoprawnym pliku XML.
- Import kończy się niepowodzeniem i generuje komunikat.
- Eksporty -
- Klient MQ lub JMS wywołuje eksport.
- Klient wysyła niepoprawny plik XML.
- Eksport kończy się niepowodzeniem oraz generuje wyjątek i komunikat.
Można przejrzeć dzienniki i wyszukać w nich wszystkie komunikaty wygenerowane przez wyjątek sprawdzania poprawności XML. Poniżej pokazano przykłady komunikatów generowanych po wykryciu niepoprawnego kodu XML podczas sprawdzania poprawności przez funkcję BOXMLSerializer
- Import JAXWS
javax.xml.ws.WebServiceException: org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: Element typu „TestResponse” musi poprzedzać specyfikacje atrybutów, „>” lub „/>”. javax.xml.ws.WebServiceException: org.apache.axiom.soap.SOAPProcessingException: Pierwszy element musi zawierać nazwę lokalną, Koperta - Import JAXRPC
[9/11/08 15:16:27:417 CDT] 0000003e ExceptionUtil E CNTR0020E: Komponent EJB zgłosił nieoczekiwany (niezadeklarowany) wyjątek podczas wywołania metody „transactionNotSupportedActivitySessionNotSupported” w komponencie „BeanId(WSXMLValidationApp#WSXMLValidationEJB.jar#Module, null)”. Dane wyjątku: WebServicesFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException faultString: org.xml.sax.SAXParseException: Element typu „TestResponse” musi poprzedzać specyfikacje atrybutów, „>” lub „/>”. Analizowany komunikat: <?xml version="1.0"?><OdpowiedzTestowa xmlns="http://WSXMLValidation"<imie>Bohdan</imie> <nazwisko>Nowak</nazwisko></OdpowiedzTestowa> faultActor: null faultDetail: [9/11/08 15:16:35:135 CDT] 0000003f ExceptionUtil E CNTR0020E: Komponent EJB zgłosił nieoczekiwany (niezadeklarowany) wyjątek podczas wywoływania metody „transactionNotSupportedActivitySessionNotSupported” w komponencie „BeanId(WSXMLValidationApp#WSXMLValidationEJB.jar#Module, null)”. Dane wyjątku: WebServicesFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException faultString: org.xml.sax.SAXException: WSWS3066E: Błąd: oczekiwano znacznika „koperta” a wykryto znacznik OdpowiedzTestowa Analizowany komunikat: <?xml version="1.0"?><OdpowiedzTestowa xmlns="http://WSXMLValidation"> <imie>Bohdan</imie><drugieImie>Jan</drugieImie> <nazwisko>Nowak</nazwisko> </OdpowiedzTestowa> faultActor: null faultDetail: - Eksport JAXRPC/JAXWS
[9/11/08 15:35:13:401 CDT] 00000064 WebServicesSe E com.ibm.ws.webservices.engine.transport.http.WebServicesServlet getSoapAction WSWS3112E: Błąd: Generowanie błędu WebServicesFault z powodu brakującego działania SOAPAction. WebServicesFault faultCode: Client.NoSOAPAction faultString: WSWS3147E: Błąd: brak nagłówka SOAPAction! faultActor: null faultDetail:
Więcej informacji o usługach sprawdzania poprawności zawiera opis interfejsu BOInstanceValidator w dokumentacji wygenerowanego interfejsu i interfejsu SPI, w sekcji Skorowidz.