2012-04-17 59 views
1

我試圖按照此配置通過mule中的單個端點公開多個服務接口: 每個服務接口都有稍微不同URL (1)http://localhost/services/Login (2)http://localhost/services/Admin如何通過Mule ESB中的單個http:入站端點公開多個cxf:jaxws服務ESB

但是我得到

任何提示的錯誤 「已經被註冊的地址SOAP 1.1端點」 如何做到這一點?我只想使用cxf服務來在SOAP和Java之間進行marshall/unmarshall,並在以後提供ws安全性。

<flow name="flow_Services"> 
    <http:inbound-endpoint address="http://localhost/services" exchange-pattern="request-response"> 

    <choice> 
     <when expression="inbound:http.request=/services/Login" evaluator="header"> 
      <cxf:jaxws-service serviceClass="com.ws.client.generated.Login" /> 
      <component><spring-object bean="Login"/></component> 
     </when> 

     <when expression="inbound:http.request=/services/Admin" evaluator="header"> 
      <cxf:jaxws-service serviceClass="com.ws.client.generated.Admin" /> 
      <component><spring-object bean="Admin"/></component> 
     </when> 
    </choice> 

回答

1

您可以擁有多個具有相同主機名和端口但不同路徑的http入站端點。以下是我測試的一個簡單示例:

<flow name="Flow" doc:name="EchoFlow"> 
    <http:inbound-endpoint exchange-pattern="request-response" 
     host="localhost" port="8084" path="services/hello" /> 
    <cxf:jaxws-service port="80" serviceClass="mypackage.ServiceInterface" /> 
    <component class="mypackage.ServiceClass" /> 
</flow> 
<flow name="Flow2" doc:name="EchoFlow2"> 
    <http:inbound-endpoint exchange-pattern="request-response" 
     host="localhost" port="8084" path="services/goodbye" /> 
    <cxf:jaxws-service port="80" serviceClass="mypackage.ServiceInterfaceTwo" /> 
    <component class="mypackage.ServiceClassTwo" /> 
</flow> 

這裏我們主持兩個Web服務;兩個端點URL開始

http://localhost:8084/services/ 

但是有不同的結局(hello和goodbye)。該serviceInterface等類看起來是這樣的:

package mypackage; 
import javax.jws.WebMethod; 
import javax.jws.WebService; 

@WebService 
public interface ServiceInterface { 
    @WebMethod 
    String sayHello(String name); 
} 

而服務類看起來是這樣的:

package mypackage; 
import javax.jws.WebService; 

@WebService(endpointInterface = "mypackage.ServiceInterface") 
public class ServiceClass implements ServiceInterface { 
    public String sayHello(String name) { 
     return "Hello "+name; 
    } 
} 

ServiceInterfaceTwo和ServiceClassTwo是相同的,但不是的sayHello()有sayGoodbye()。