how can I get the response message from Axis2 in spring integration

冷暖自知 提交于 2019-12-10 12:15:45

问题


I need to integrate my webservice (Axis2) in spring integration: I have 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>

And a 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);
		
	}

}

The program run very well and I can see in the console the next response:

<?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>

My question is how Can I manipulate/How can get the response in Java program because I need the response. I tried to do a lot of things but unfortunately did not work anything I only can see the response in the console but I need to manipulate the response.

I do not how can I access this configuration or if I need to configurate other things.

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

Can Anyone help me please?


回答1:


  1. Use a Messaging Gateway.

    public interface Gateway
    
        String sendAndReceive(String out);
    
    }
    
    <int:gateway service-interface="foo.Gateway" 
         default-request-channel="messageChannelIN" />
    
  2. Remove the output-channel from the chain

  3. The reply will be returned to the caller via the gateway

    Gatweway gw = context.getBean(Gateway.class);
    ...
    String reply = gw.sendAndReceive(requestXml);
    

This has the added bonus of not exposing your application to the messaging infrastructure.




回答2:


It's working my program right now!!. Thanks for your help Gary Russell!!! your comments were very useful.

The final code was:

xml configuration

........
<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 Code:

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);

}


来源:https://stackoverflow.com/questions/33641081/how-can-i-get-the-response-message-from-axis2-in-spring-integration

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!