如何在Spring集成中获取Axis2的响应消息

时间:2015-11-10 22:44:40

标签: spring spring-integration

我需要在spring集成中集成我的web服务(Axis2):我有spring-axis2-message.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/integration"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:stream="http://www.springframework.org/schema/integration/stream"
	xmlns:ws="http://www.springframework.org/schema/integration/ws"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans.xsd
			http://www.springframework.org/schema/integration
			http://www.springframework.org/schema/integration/spring-integration.xsd
			http://www.springframework.org/schema/integration/stream
			http://www.springframework.org/schema/integration/stream/spring-integration-stream.xsd
			http://www.springframework.org/schema/integration/ws
			http://www.springframework.org/schema/integration/ws/spring-integration-ws.xsd">

	<chain input-channel="messageChannelIN" output-channel="messageChannelOUT">
		<ws:header-enricher    >
			<ws:soap-action value="getMessageService"/>
		</ws:header-enricher>
		<ws:outbound-gateway uri="http://localhost:8080/axis2-webservice/services/wservices?wsdl" reply-channel="messageChannelOUT"/>
	</chain>
	

	<!-- The response from the service is logged to the console. -->
	<stream:stdout-channel-adapter id="messageChannelOUT"  append-newline="true" />
	
</beans:beans>

和TestAxis2.java

package org.neos.spring.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.integration.support.channel.BeanFactoryChannelResolver;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.core.DestinationResolver;


public class TestAxis2 {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
				"/META-INF/spring/integration/spring-axis2-message.xml");
		DestinationResolver<MessageChannel> channelResolver = new BeanFactoryChannelResolver(context);

		String requestXml = 
				"<getMessageService xmlns=\"http://service.ws.axis2.neos.org\">" + 
						"<name>HUGO</name>"
				+ "</getMessageService>";

		// Create the Message object
		Message<String> message = MessageBuilder.withPayload(requestXml).build();

		// Send the Message to the handler's input channel
		MessageChannel channel = channelResolver.resolveDestination("messageChannelIN");
		channel.send(message);
		
	}

}

程序运行得很好,我可以在控制台中看到下一个响应:

<?xml version="1.0" encoding="UTF-8"?><ns:getMessageServiceResponse xmlns:ns="http://service.ws.axis2.neos.org"><ns:return>HELLO HUGO!, WELCOME TO WEBSERVICE AXIS1 hola</ns:return></ns:getMessageServiceResponse>

我的问题是如何操作/如何在Java程序中获取响应,因为我需要响应。我试图做很多事情,但遗憾的是没有任何工作,我只能在控制台中看到响应,但我需要操纵响应。

我不知道如何访问此配置或我是否需要配置其他内容。

access<stream:stdout-channel-adapter id="messageChannelOUT"  append-newline="true" />

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

  1. 使用Messaging Gateway

    public interface Gateway
    
        String sendAndReceive(String out);
    
    }
    
    <int:gateway service-interface="foo.Gateway" 
         default-request-channel="messageChannelIN" />
    
  2. 从链中删除output-channel

  3. 回复将通过网关

    返回给来电者
    Gatweway gw = context.getBean(Gateway.class);
    ...
    String reply = gw.sendAndReceive(requestXml);
    
  4. 这还有一个好处,就是不要将您的应用程序暴露给消息传递基础架构。

答案 1 :(得分:0)

现在正在运行我的程序!!谢谢你的帮助加里拉塞尔!你的评论非常有用。

最终的代码是:

xml配置

........
<chain input-channel="messageChannelIN">
    <ws:header-enricher>
        <ws:soap-action value="getMessageService"/>
    </ws:header-enricher>
    <ws:outbound-gateway uri="http://localhost:8080/axis2-webservice/services/wservices?wsdl" />
</chain>

<gateway id="messageChannelOUT" service-interface="org.neos.spring.ws.service.GatewayAxis" default-request-channel="messageChannelIN"/>

Java代码:

public interface GatewayAxis {
  @Gateway
  String sendAndReceive(String out);}

TestAxis2

public static void main(String[] args) {
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
            "/META-INF/spring/integration/spring-axis2-message.xml");

    GatewayAxis gateway = context.getBean(GatewayAxis.class);

    String requestXml = 
            "<getMessageService xmlns=\"http://service.ws.axis2.neos.org\">" + 
                    "<name>HUGO</name>"
            + "</getMessageService>";
    String reply = gateway.sendAndReceive(requestXml);
    System.out.println(reply);

}