Создание веб-службы SOAP на основе WS-Notification WSDL - PullRequest
0 голосов
/ 11 мая 2019

Мне нужно создать веб-службу SOAP, которая принимает запрос SOAP и отправляет ответный ответ.Я хочу, чтобы сервис был максимально легким.Он может быть написан на Java или Python.

Мне дали .WSDL и соответствующий .XSD для сервиса.Сервис представляет собой упрощенную реализацию стандарта WS-Notification.Я не могу контролировать содержимое этих файлов.

WSDL не содержит определения службы.

Вот WSDL:

<?xml version="1.0" encoding="utf-8"?>

<wsdl:definitions name="WS-BaseNotification"
      targetNamespace="http://www.example.com/wsdl/notification"
      xmlns:wsntw="http://www.example.com/wsdl/notification"
      xmlns:wsnt="http://www.example.com/schema/notification"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

    <!-- ===================== Types Definitions ====================== -->
    <wsdl:types>
        <xsd:schema>
            <xsd:import
             namespace="http://www.example.com/schema/notification" 
             schemaLocation="Notification.xsd"/>
        </xsd:schema>
    </wsdl:types>

    <!-- ================ NotificationConsumer::Notify ================ 
      Notify(
        NotificationMessage
          (SubscriptionReference, TopicExpression, ProducerReference,
           Message)*
      returns: Ack
    -->

    <wsdl:message name="Notify">
        <wsdl:part name="Notify" element="wsnt:Notify"/>
    </wsdl:message>
    <wsdl:message name="Acknowledge">
        <wsdl:part name="Acknowledge" element="wsnt:Acknowledge"/>
    </wsdl:message>
    <wsdl:message name="Fault">
        <wsdl:part name="Fault" element="wsnt:Fault"/>
    </wsdl:message>

    <!-- ========= NotificationConsumer PortType Definition =========== -->
    <wsdl:portType name="NotificationConsumer">
        <wsdl:operation name="Notify">
            <wsdl:input message="wsntw:Notify" />
            <wsdl:output message="wsntw:Acknowledge" />
            <wsdl:fault message="wsntw:Fault" name="fault1"/>
        </wsdl:operation>
    </wsdl:portType>

</wsdl:definitions>

А вот XSD:

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns:wsnt="http://www.example.com/schema/notification" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/schema/notification" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.2">

    <!--This XSD defined the types and elements used for the ERCOT Notification interfaces-->
    <!---->
    <!-- ================== Message Helper Types  ===================== -->
    <xsd:complexType name="NotificationMessageHolderType">
        <xsd:sequence>
            <xsd:element name="Message">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:any namespace="##any" processContents="lax"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:element name="NotificationMessage" type="wsnt:NotificationMessageHolderType"/>
    <!-- ========== Message Types for NotificationConsumer  =========== -->
    <xsd:element name="Notify">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="wsnt:NotificationMessage" maxOccurs="unbounded"/>
                <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Acknowledge">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="ReplyCode" type="xsd:string" minOccurs="0"/>
                <xsd:element name="Timestamp" type="xsd:dateTime" minOccurs="0"/>
                <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Fault">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="FaultCode" type="xsd:string" minOccurs="0"/>
                <xsd:element name="Timestamp" type="xsd:dateTime" minOccurs="0"/>
                <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

Как создать веб-сервис из этих 2 файлов?

Я попробовал следующее:

  • В Eclipse создайте динамический веб-проекти импортировать веб-сервис.Я получаю сообщение об ошибке «Notification.wsdl не имеет элемента службы».
  • Использование WSDL2Java: я получаю сообщение об ошибке «Notification.wsdl не определяет никакие службы»

Я действительно запутался в том, как я могу реализовать этот сервис, используя Java или Python.

Любая помощь очень ценится!

...