2012-04-17 38 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()。