1

Mule が http エンドポイントに wsdl を作成するので、soapUI を介してアクセスできるかどうか疑問に思っています。次のように、soap エンベロープで xml を渡します。私は wsdl を作成していませんが、渡されたこの xml を読み込んで使用するためのフローがあります。他の ESB ツールでは、このエンドポイントが wsdl を公開する必要があると言うことができることを知っています。ビルド中のあなた。ラバはこのようなことをしますか?

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
    <lookup>
        <bookid>0028634748</bookid>
    </lookup>
</soapenv:Body>

御時間ありがとうございます。

4

1 に答える 1

1

Mule はオンザフライで WSDL を生成できますが、WSDLを推測するための何かが必要です。これは、JAX-WS アノテーションを必要とせずに純粋な POJO コンポーネントから実行でき、次のように構成されます。

<flow name="bookLookupService">
    <http:inbound-endpoint address="http://localhost:8181/bls"
        exchange-pattern="request-response">
        <cxf:simple-service serviceClass="com.acme.BookLookupService" />
    </http:inbound-endpoint>
    <component class="com.acme.BookLookupServiceImpl" />
</flow>

次のインターフェースを使用します。

package com.acme;

public interface BookLookupService
{
    public static class BookLookup
    {
        private String bookid;

        public String getBookid()
        {
            return bookid;
        }

        public void setBookid(final String bookid)
        {
            this.bookid = bookid;
        }
    }

    public static class Book
    {
        private String bookid, name;

        public String getBookid()
        {
            return bookid;
        }

        public void setBookid(final String bookid)
        {
            this.bookid = bookid;
        }

        public String getName()
        {
            return name;
        }

        public void setName(final String name)
        {
            this.name = name;
        }
    }

    Book lookup(final BookLookup bookLookup);
}

と実装:

package com.acme;

public class BookLookupServiceImpl implements BookLookupService
{
    public Book lookup(final BookLookup bookLookup)
    {
        final Book book = new Book();
        book.setName("LOTR");
        book.setBookid(bookLookup.getBookid());
        return book;
    }
}

問題は、WSDL が上記の予想されるメッセージに準拠しないことです。次のようなメッセージが表示されます。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:acme="http://acme.com/" xmlns:acme1="http://acme.com">
   <soapenv:Header/>
   <soapenv:Body>
      <acme:lookup>
         <acme:arg0>
            <acme1:bookid>ABC123</acme1:bookid>
         </acme:arg0>
      </acme:lookup>
   </soapenv:Body>
</soapenv:Envelope>

生成された WSDL をより厳密に制御したい場合は、JAX-WS / JAXB アノテーションを使用する必要があります。

于 2012-10-19T17:52:28.747 に答える