T.M. SoftStudio

feci quod potui, faciant meliora potentes

JAXM API и SAAJ API

Пакет javax.xml.messaging

    Интерфейс OnewayListener. Интерфейс для Web-сервиса — получателя асинхронных клиентских сообщений, ответы на которые посылаются отдельными операциями.

Интерфейс имеет метод

public void onMessage(javax.xml.soap.SOAPMessage message)

вызываемый контейнером Java EE сервера при получении сообщения от поставщика сообщений. Далее сообщение может обрабатываться, используя объект SOAPMessage.

Клиентское приложение, работающее в контейнере Java EE сервера, также может реализовывать данный интерфейс для получения сообщений от поставщика сообщений.

    Интерфейс ReqRespListener. Интерфейс для Web-сервиса — получателя синхронных клиентских сообщений. Отправка запроса для такого типа сообщений и получение ответа выполняются в одной операции, поэтому Web-сервис, реализующий данный интерфейс, при получении клиентского сообщения сразу должен на него ответить.

Интерфейс имеет метод

public javax.xml.soap.SOAPMessage
onMessage(javax.xml.soap.SOAPMessage message)

вызываемый контейнером Java EE сервера при получении сообщения и возвращающий ответное сообщение.

Клиентское приложение, работающее в контейнере Java EE сервера, также может реализовывать данный интерфейс для получения сообщений от поставщика сообщений.

    Класс ProviderConnectionFactory. Класс-фабрика, используемый клиентским приложением для создания объекта ProviderConnection, обеспечивающего соединение с поставщиком сообщений Messaging Provider.

Класс имеет два метода.

  • public static ProviderConnectionFactory newInstance()

Создает объект фабрики, связанный с поставщиком сообщений, определенным по умолчанию. Если же необходимо установить сообщение с именованным поставщиком сообщений, тогда необходимо использовать пакет javax.naming следующим образом:

Context ctx = new InitialContext();

ProviderConnectionFactory pcf =
(ProviderConnectionFactory)ctx.lookup("[JNDI-имя]");

  • public abstract ProviderConnection createConnection()

Создает объект ProviderConnection, представляющий соединение с поставщиком сообщений.

    Интерфейс ProviderConnection. Интерфейс для клиентского приложения, устанавливающего соединение с поставщиком сообщений Messaging Provider.

Интерфейс имеет следующие методы.

  • public ProviderMetaData getMetaData()

Возвращает объект ProviderMetaData, содержащий информацию о поставщике сообщений.

  • public void close()

Закрывает соединение с поставщиком сообщений и освобождает все связанные ресурсы.

  • public javax.xml.soap.MessageFactory
    createMessageFactory(java.lang.String profile)

Создает объект MessageFactory, используемый для создания сообщений и соответствующий конкретному JAXM-профилю, определенному в параметре метода. JAXM-профиль — это расширение, позволяющее например, использовать ebXML-протокол поверх SOAP-протокола.

  • public void send(javax.xml.soap.SOAPMessage message)

Отправляет сообщение через поставщика сообщений. Для отправки синхронного сообщения от точки к точке необходимо применять метод call() класса javax.xml.soap.SOAPConnection. В этом случае сообщение отправляется без использования поставщика сообщений.

    Интерфейс ProviderMetaData. Обеспечивает информацию о поставщике сообщений с помощью следующих методов.

  • public java.lang.String getName()

Возвращает имя поставщика сообщений.

  • public int getMajorVersion()

Возвращает максимальную версию, которой соответствует поставщик сообщений.

  • public int getMinorVersion()

Возвращает минимальную версию, которой соответствует поставщик сообщений.

  • public java.lang.String[] getSupportedProfiles()

Возвращает перечень поддерживаемых поставщиком сообщений JAXM-профилей.

    Класс Endpoint. Поставщик сообщений создает объекты Endpoint, представляющие по умолчанию URI-адреса конечных точек для доставки сообщения, исходя из заголовка SOAP-сообщения. Если же отправитель посылает синхронное сообщение без использования поставщика сообщений, он должен сам создать объект Endpoint, в частности объект его подкласса URLEndpoint, как параметр метода call() класса javax.xml.soap.SOAPConnection.

Класс имеет конструктор public Endpoint(java.lang.String uri) и метод public java.lang.String toString(), возвращающий URI-адрес.

    Класс URLEndpoint. Класс представляет URL-адрес конечной точки для доставки сообщения и имеет конструктор public URLEndpoint(java.lang.String url) и метод public java.lang.String getURL().

    Класс JAXMServlet. Класс, который расширяется классом Web-сервиса — получателем JAXM-сообщений. Расширяет javax.servlet.http.HttpServlet и дополнительно имеет следующие методы.

  • public void init(javax.servlet.ServletConfig servletConfig)

Отвечает за инициализацию сервлета.

  • public void
    setMessageFactory(javax.xml.soap.MessageFactory msgFactory)

Определяет объект MessageFactory для получения сообщений.

  • protected static javax.xml.soap.MimeHeaders
    getHeaders(javax.servlet.http.HttpServletRequest req)

Возвращает заголовок запроса.

  • protected static void putHeaders(javax.xml.soap.MimeHeaders headers,
    javax.servlet.http.HttpServletResponse res)

Определяет заголовок ответа.

  • public void doPost(javax.servlet.http.HttpServletRequest req,
    javax.servlet.http.HttpServletResponse resp)

Принимает запрос и создает ответ.

    Исключение JAXMException. Представляет ошибку при отправке сообщения, установке соединения с поставщиком сообщений и др.



Как видно из приведенного списка, класс запрашиваемого Web-сервиса расширяет класс JAXMServlet и реализует интерфейс OnewayListener или ReqRespListener. Использование метода onMessage() интерфейса избавляет от необходимости переопределения метода doPost().

Класс клиентского приложения, посылающего сообщение Web-сервису с помощью поставщика сообщений Messaging Provider, использует класс ProviderConnectionFactory и интерфейс ProviderConnection для установки связи с поставщиком сообщений Messaging Provider и отправки сообщения.