在将基于Spring集成的Web服务转换为spring boot

时间:2015-12-30 07:23:05

标签: web-services soap spring-boot spring-integration

我想将基于Spring Integration的Web服务转换为Spring Boot Application。

我的应用程序是使用Spring集成Web服务开发的。 我想将现有的应用程序转换为spring boot。我试图找到很多演示。在线没有可用的演示。

转换时我遇到了这个问题。

提交请求后我的Soap meesage响应如下:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode>SOAP-ENV:Server</faultcode>
         <faultstring xml:lang="en">No adapter for endpoint [countryGateway]: Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint?</faultstring>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

下面给出了应用程序的启动

Application.Java

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.integration.config.EnableIntegration;

@SpringBootApplication
@EnableIntegration

public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Spring配置如下

采样context.xml中

    <bean id="payloadMapping"
        class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
        <property name="mappings">
            <props>
                <prop
                    key="{http://spring.io/guides/gs-producing-web-service}getCountryRequest">countryGateway</prop>             
            </props>
        </property>
    </bean>

    <int:channel id="countryRequestChannel"></int:channel>
    <int:channel id="countryResponseChannel"></int:channel>
    <int:channel id="countryErrorChannel"></int:channel>

    <int-ws:inbound-gateway id="countryGateway"
        error-channel="countryErrorChannel" request-channel="countryRequestChannel"
        reply-channel="countryResponseChannel"  />

        <int:service-activator input-channel="countryRequestChannel" output-channel="countryResponseChannel" method="hello" ref="sampleActivator"></int:service-activator>
    <bean id="sampleActivator" class="com.sample.country.SampleValidate"></bean>

Maven配置如下

的pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sample.country</groupId>
    <artifactId>springbootsample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot</name>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.1.RELEASE</version>
    </parent>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <!-- Adding the dependencies -->
    <dependencies>
        <!-- To support web services -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-ws</artifactId>
        </dependency>
        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-integration</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-ws</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-xml</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.ws</groupId>
            <artifactId>spring-ws-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.ws.commons.axiom</groupId>
            <artifactId>axiom-api</artifactId>
            <version>1.2.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ws.commons.axiom</groupId>
            <artifactId>axiom-impl</artifactId>
            <version>1.2.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ws.xmlschema</groupId>
            <artifactId>xmlschema-core</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom2</artifactId>
        </dependency>
        <dependency>
            <groupId>xom</groupId>
            <artifactId>xom</artifactId>
            <version>1.2.5</version>
        </dependency>
    </dependencies>
</project>

我使用的Web服务配置如下所示

WebServiceConfig.java

import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.ws.config.annotation.EnableWs;
import org.springframework.ws.config.annotation.WsConfigurerAdapter;
import org.springframework.ws.transport.http.MessageDispatcherServlet;
import org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition;
import org.springframework.xml.xsd.SimpleXsdSchema;
import org.springframework.xml.xsd.XsdSchema;
@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 = "countries")
    public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema countriesSchema) {
        DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
        wsdl11Definition.setPortTypeName("CountriesPort");
        wsdl11Definition.setLocationUri("/ws");
        wsdl11Definition.setTargetNamespace("http://spring.io/guides/gs-producing-web-service");
        wsdl11Definition.setSchema(countriesSchema);
        return wsdl11Definition;
    }
    @Bean
    public XsdSchema countriesSchema() {
        return new SimpleXsdSchema(new ClassPathResource("countries.xsd"));
    }

}

1 个答案:

答案 0 :(得分:0)

我没有看到你在任何地方引用--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-42-e192a1699cc5> in <module>() 174 # for i, text in enumerate(ind4t): --> 175 if x_4t<72: 176 ax4t.annotate(str(x_4t)[:-2]+"%", xy=(x_4t+2,ind4t+0.4),fontsize=9, color='black', va='center', ha='left') C:\Users\m\Anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self) 729 "Use a.empty, a.bool(), a.item(), a.any() or a.all()." --> 730 .format(self.__class__.__name__)) 731 ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). During handling of the above exception, another exception occurred: KeyError Traceback (most recent call last) <ipython-input-42-e192a1699cc5> in <module>() 185 except: 186 for i, text in enumerate(ind4t): --> 187 ax4t.annotate(str(x_4t[i])[:-2]+"%", xy=(x_4t[i]+2,ind4t[i]+0.4),fontsize=9, color='black', va='center', ha='left') 188 for i, text in enumerate(ind5t): 189 ax5t.annotate(str(x_5t[i])[:-2]+"%", xy=(x_5t[i]+2,ind5t[i]+0.4),fontsize=9, color='black', va='center', ha='left') C:\Users\m\Anaconda3\lib\site-packages\pandas\core\series.py in __getitem__(self, key) 549 def __getitem__(self, key): 550 try: --> 551 result = self.index.get_value(self, key) 552 553 if not np.isscalar(result): C:\Users\m\Anaconda3\lib\site-packages\pandas\core\index.py in get_value(self, series, key) 1721 1722 try: -> 1723 return self._engine.get_value(s, k) 1724 except KeyError as e1: 1725 if len(self) > 0 and self.inferred_type in ['integer','boolean']: pandas\index.pyx in pandas.index.IndexEngine.get_value (pandas\index.c:3204)() pandas\index.pyx in pandas.index.IndexEngine.get_value (pandas\index.c:2903)() pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:3843)() pandas\hashtable.pyx in pandas.hashtable.Int64HashTable.get_item (pandas\hashtable.c:6525)() pandas\hashtable.pyx in pandas.hashtable.Int64HashTable.get_item (pandas\hashtable.c:6463)() KeyError: 0

尝试添加

Sample-context.xml

@ImportResource("Sample-context.ml") 班。

修改

Application不会添加@EnableWs,只会添加MessageEndpointAdapter

这有效......

MethodEndpointAdapter