Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过Spring集成连接SOAP服务器和JSON客户端?_Java_Json_Soap_Spring Integration - Fatal编程技术网

Java 如何通过Spring集成连接SOAP服务器和JSON客户端?

Java 如何通过Spring集成连接SOAP服务器和JSON客户端?,java,json,soap,spring-integration,Java,Json,Soap,Spring Integration,你好。我不熟悉spring集成。我编写了一个简单的SOAP服务器,我需要连接一个通过JSON进行通信的客户端和一个通过SOAP进行通信的服务器,但是我对这个框架提供的技术感到困惑。据我所知,有JsonToObjectTransformer和ObjectToMapTransformer变压器。据我所知,在将数据传输到控制器之前,有必要对数据进行转换。有没有可能在transformers的帮助下实现这一点,或者我可以在spring集成中使用其他技术。这只能在DSL的帮助下实现吗 控制器: @Endp

你好。我不熟悉spring集成。我编写了一个简单的SOAP服务器,我需要连接一个通过JSON进行通信的客户端和一个通过SOAP进行通信的服务器,但是我对这个框架提供的技术感到困惑。据我所知,有JsonToObjectTransformer和ObjectToMapTransformer变压器。据我所知,在将数据传输到控制器之前,有必要对数据进行转换。有没有可能在transformers的帮助下实现这一点,或者我可以在spring集成中使用其他技术。这只能在DSL的帮助下实现吗

控制器:

@Endpoint
public class CityEndpoint {
    private static final String NAMESPACE_URI = "http://weather.com/senchenko";
    private CityRepository cityRepository;

    @Autowired
    public CityEndpoint(CityRepository cityRepository) {
        this.cityRepository = cityRepository;
    }

    @PayloadRoot(namespace = NAMESPACE_URI, localPart = "getCityRequest")
    @ResponsePayload
    public GetCityResponse getCityResponse(@RequestPayload GetCityRequest request){
        GetCityResponse response = new GetCityResponse();
        response.setCity(cityRepository.findCity(request.getName()));
        return response;
    }
}
配置:

@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
    @Bean
    public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(applicationContext);
        servlet.setTransformWsdlLocations(true);
        return new ServletRegistrationBean(servlet, "/ws/*");
    }

    @Bean(name = "city")
    public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema citySchema) {
        DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
        wsdl11Definition.setPortTypeName("CityPort");
        wsdl11Definition.setLocationUri("/ws");
        wsdl11Definition.setTargetNamespace("http://weather.com/senchenko");
        wsdl11Definition.setSchema(citySchema);
        return wsdl11Definition;
    }

    @Bean
    public XsdSchema citySchema() {
        return new SimpleXsdSchema(new ClassPathResource("xsd/weather.xsd"));
    }

    @Bean
    @Transformer()
    JsonToObjectTransformer jsonToObjectTransformer() {
        return new JsonToObjectTransformer();
    }

    @Bean
    @Transformer()
    ObjectToMapTransformer objectToMapTransformer(){
        return new ObjectToMapTransformer();
    }
}
添加

我解决了重定向到SOAP的问题,但仍然不知道将JSON转换为SOAP信封并返回的最佳方法

@Bean
    public IntegrationFlow httpProxyFlow() {
        return IntegrationFlows
                .from(Http.inboundGateway("/service"))
                .transform(t -> TEST_ENVOLOPE)
                .enrichHeaders(h -> h.header("Content-Type", "text/xml; charset=utf-8"))
                .handle(Http.outboundGateway("http://localhost:8080/ws")
                        .expectedResponseType(String.class))
                .transform(t -> TEST_RESPONSE)
                .get();
    }

您的问题不清楚,或者您不完全熟悉工作所需的技术。 SOAP完全是关于XML消息交换的。在服务器端,您有一个特定的
MessageDispatcherServlet
,它将传入的HTTP请求完全转换为XML格式的SOAP信封。JSON一点也没有

根据XSD定义和生成的模型,当传入的SOAP请求通过JaxB从XML解组到域模型时,Spring WS框架将触发您的
CityEndpoint.getCityResponse()
。Spring集成根本就没有什么意义

您的
JsonToObjectTransformer
ObjectToMapTransformer
在这种情况下没有任何意义。它们不参与SOAP请求过程


很抱歉,我的回答让您失望,但您的问题甚至不清楚,当JSON和XML完全不同且不兼容协议时,JSON客户端将如何调用SOAP服务。

您的问题不清楚,或者您不完全熟悉需要使用的技术。 SOAP完全是关于XML消息交换的。在服务器端,您有一个特定的
MessageDispatcherServlet
,它将传入的HTTP请求完全转换为XML格式的SOAP信封。JSON一点也没有

根据XSD定义和生成的模型,当传入的SOAP请求通过JaxB从XML解组到域模型时,Spring WS框架将触发您的
CityEndpoint.getCityResponse()
。Spring集成根本就没有什么意义

您的
JsonToObjectTransformer
ObjectToMapTransformer
在这种情况下没有任何意义。它们不参与SOAP请求过程


很抱歉,我的回答让您失望,但您的问题甚至不清楚,当JSON和XML完全不同且不兼容协议时,JSON客户端将如何调用SOAP服务。

对不起,我的意思是客户端向集成发送请求;集成接受请求,将其发送到SOAP,接收响应,将其转换为json并发送到客户端。在将其交给控制器之前,可能需要将其包装在信封中。对不起,我的意思是客户端向集成发送请求;集成接受请求,将其发送到SOAP,接收响应,将其转换为json并发送到客户端。在将其交给控制器之前,可能需要将其包装在信封中。