У меня есть клиент, который подключается к веб-службе для получения некоторой информации.У меня есть требование, когда я должен отправить одну и ту же информацию нескольким службам через разные порты.Чтобы решить эту проблему без изменения клиентского кода, я нашел MULE ESB, который должен делать именно то, что мне нужно.
Я нашел руководство, в котором я мог бы подключить одного клиента к одному сервису, используя MULE ESB и один порт., но я не могу найти способ связать сервисы так, чтобы они все слушали один порт, но у них были разные.
Вот как это должно выглядеть:
ОБНОВЛЕНИЕ:
вот моя текущая конфигурация Mule Applications:
<mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="CE-3.2.1" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd ">
<flow name="flows1Flow1" doc:name="flows1Flow1">
<http:inbound-endpoint exchange-pattern="request-response" address="http://localhost:4433/miniwebservice" mimeType="text/xml" doc:name="HTTP"/>
<http:outbound-endpoint exchange-pattern="request-response" address="http://localhost:4434/miniwebservice?wsdl" mimeType="text/xml" doc:name="HTTP"/>
</flow>
</mule>
Вот WebService:
Клиент:
package miniwebservice;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class TestWsClient
{
public static void main( final String[] args ) throws Throwable
{
String url = ( args.length > 0 ) ? args[0] : "http://localhost:4434/miniwebservice";
Service service = Service.create(
new URL( url + "?wsdl" ),
new QName( "http://miniwebservice/", "HalloWeltImplService" ) );
HalloWelt halloWelt = service.getPort( HalloWelt.class );
System.out.println( "\n" + halloWelt.hallo( args.length > 1 ? args[1] : "" ) );
}
}
Сервер:
package miniwebservice;
import javax.xml.ws.Endpoint;
public class TestWsServer
{
public static void main( final String[] args )
{
String url = ( args.length > 0 ) ? args[0] : "http://localhost:4434/miniwebservice";
Endpoint.publish( url, new HalloWeltImpl() );
}
}
InterfaceImpl:
package miniwebservice;
import javax.jws.WebService;
@WebService( endpointInterface="miniwebservice.HalloWelt" )
public class HalloWeltImpl implements HalloWelt
{
public String hallo( String wer )
{
return "Hallo " + wer;
}
}
interface:
package miniwebservice;
import javax.jws.*;
@WebService
public interface HalloWelt
{
public String hallo( @WebParam( name = "wer" ) String wer );
}
Если я запускаю приложение Server и Mule и пытаюсь достичь http://localhost:4434/miniwebservice?wsdl ower http://localhost:4433/miniwebservice Я получаю следующее исключение в моем браузере (FireFox 8.0):
Не удалось создать сообщение SOAP из-за исключения: ошибка чтения XML: javax.xml.stream.XMLStreamException: ParseError at [row, col]: [1,1] Сообщение: содержимое не разрешено в прологе.
Я простоначал работать с мулом, поэтому я думаю, что было бы неплохо перенаправить мула в службу для получения wsdl, но это кажется немного сложным.