Как предоставить несколько cxf:jaxws-сервису через одну http:inbound-конечную точку в 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>
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() он имеет функцию Goodbye().