Mule可以即時生成WSDL,但它需要東西來推斷WSDL。它可以從一個純POJO組件來完成,而無需任何JAX-WS註釋,並且被配置如下:
<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註釋。
不是我所希望的,但它回答了問題並提供瞭解決方案。我希望端點能夠在爲流創建WSDL方面發揮更好的作用。而不僅僅是創建Web服務的自下而上或自上而下的方法。可能還有其他方法,但謝謝你的答案。 – bbotz
或者,您可以手工製作WSDL(因爲顯然沒有任何Mule/CXF可以從中推斷出它),並在GET請求上向HTTP端點提供服務。但是,再次,這不會做你以後的自動生成的WSDL生成:) –