Apache Camel SOAP/CXF向服务器发出请求(Spring Boot )

avwztpqn  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(192)

我正在尝试在Apache Camel CXF的帮助下向专用WSDL服务器发出请求。
我有WSDL URL:http://www.learnwebservices.com/services/tempconverter?wsdl
我已经使用cxf-codegen-plugin创建了WSDL的Java类:

<plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>3.4.2</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                        <configuration>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>${basedir}/src/main/resources/wsdl/tempconverter.wsdl</wsdl>
                                    <packagenames>
                                        <packagename>office.planet.integrations.merlion</packagename>
                                    </packagenames>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

我有以下 Camel 路线:

@Component
public class MerlionRoute
      extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("direct:celsius-to-fahrenheit")
              .process(exchange -> {
                  System.out.println("HELLO!!!!!");
                  CelsiusToFahrenheitRequest c = new CelsiusToFahrenheitRequest();
                  c.setTemperatureInCelsius(Double.valueOf(exchange.getIn().getHeader("num").toString()));
                  exchange.getIn().setBody(c);
              })
              .setHeader(CxfConstants.OPERATION_NAME, constant("CelsiusToFahrenheit"))
              .setHeader(CxfConstants.OPERATION_NAMESPACE, constant("{{endpoint.namespace}}"))
              .to("cxf:bean:cxfConvertTemp")
              .process(exchange -> {
                  System.out.println("WE ARE HERE");
                  MessageContentsList response = (MessageContentsList) exchange.getIn().getBody();
                  CelsiusToFahrenheitResponse r = (CelsiusToFahrenheitResponse) response.get(0);
                  exchange.getIn().setBody("Temp in Farenheit: "+r.getTemperatureInFahrenheit());
                  System.out.println(r.getTemperatureInFahrenheit());
              })
              .end();
    }
}

端点的Bean类:

@Configuration
public class CxfBeans {
    @Value("${endpoint.wsdl}")
    private String SOAP_URL;

    @Bean(name = "cxfConvertTemp")
    public CxfEndpoint buildCxfEndpoint() {
        CxfEndpoint cxf = new CxfEndpoint();
        cxf.setAddress(SOAP_URL);
        cxf.setServiceClass(TempConverterEndpoint.class);
        cxf.setWsdlURL(SOAP_URL);
        return cxf;
    }
}

以及WSDL端点:

endpoint.wsdl=http://www.learnwebservices.com/services/tempconverter?wsdl
endpoint.namespace=http://learnwebservices.com/services/tempconverter

当我启动项目时,我的路线开始了,但什么也没有发生。我只能看到:

2022-03-31 18:41:44.933  INFO 44313 --- [  restartedMain] o.a.c.w.s.f.ReflectionServiceFactoryBean : Creating Service {http://learnwebservices.com/services/tempconverter}TempConverterEndpointService from WSDL: http://www.learnwebservices.com/services/tempconverter?wsdl

我应该如何在Camel CXF中从WSDL服务器请求数据?我做错了什么?

w41d8nur

w41d8nur1#

您的路由需要被触发。就目前而言,没有任何东西从端点"direct:celsius-to-fahrenheit"呼叫您,因此实际上,没有任何事情发生。
假设您希望此路由只被触发一次,则可以将From端点定义为"timer://celsius-to-fahrenheit?repeatCount=1"
请参阅Camel Timer component

相关问题