Как открыть несколько сервисов cxf:jaxws через одну http:inbound-endpoint в Mule ESB

Я пытаюсь открыть несколько интерфейсов службы через одну конечную точку в муле в соответствии с этой конфигурацией: каждый интерфейс службы имеет немного другой URL-адрес (1) http://localhost/services/Login (2) http://localhost/services/Admin

Однако я получаю сообщение об ошибке «Конечная точка Soap 1.1 уже зарегистрирована по адресу»

Любые советы о том, как это сделать? Я просто хочу использовать службу cxf для упорядочения/деупорядочения между SOAP и Java, а позднее для обеспечения безопасности 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>

person Bobs Dogs    schedule 17.04.2012    source источник


Ответы (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>

Здесь мы размещаем два веб-сервиса; оба URL-адреса конечных точек начинаются

http://localhost:8084/services/ 

но имеют разные окончания (привет и до свидания). Класс ServiceInterface выглядит так:

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

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

И ServiceClass выглядит так:

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().

person BigOakTree    schedule 20.03.2013