1

私は長い間そのエラーに苦労しており、グーグルで検索し、ウェブ上の例を見て、まだうまくいきません。正直に言うと、プロジェクトがこのエラーをスローする理由がわかりません。

Caused by: java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.oxm.Marshaller] for property 'marshaller': no matching editors or conversion strategy found
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:264)
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:448)
    ... 52 more)
    at junit.framework.Assert.fail(Assert.java:57)
    at junit.framework.TestCase.fail(TestCase.java:227)
    at junit.framework.TestSuite$1.runTest(TestSuite.java:100)
    at junit.framework.TestCase.runBare(TestCase.java:141)
    at junit.framework.TestResult$1.protect(TestResult.java:122)
    at junit.framework.TestResult.runProtected(TestResult.java:142)
    at junit.framework.TestResult.run(TestResult.java:125)
    at junit.framework.TestCase.run(TestCase.java:129)
    at junit.framework.TestSuite.runTest(TestSuite.java:255)
    at junit.framework.TestSuite.run(TestSuite.java:250)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

したがって、私のセットアップはSpring Web Services、Jaxb2、mavenです。事前定義された xsd ファイルがあり、jaxb2 maven プラグインによってそれらから Java クラスを生成しました。

<plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxb2-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>schema1-xjc</id>
                        <goals>
                            <goal>xjc</goal>
                        </goals>
                        <configuration>
                            <schemaDirectory>src/main/resources/</schemaDirectory>
                            <schemaFiles>ApplicationResponse.xsd</schemaFiles>
                            <packageName>com.package.response</packageName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

私のpomにはさらにこれらの依存関係があります:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>${jaxb.api.version}</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.7</version>
    <!-- <exclusions>
        <exclusion>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
        </exclusion>
    </exclusions> -->
</dependency>
<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>2.5.0</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.stream</groupId>
    <artifactId>sjsxp</artifactId>
    <version>1.0.2</version>
</dependency>

ここに私のappContext.xmlがあります

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:util="http://www.springframework.org/schema/util"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:sws="http://www.springframework.org/schema/web-services"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/web-services
                        http://www.springframework.org/schema/web-services/web-services-2.0.xsd
                        http://www.springframework.org/schema/util
                        http://www.springframework.org/schema/util/spring-util-2.0.xsd">

    <context:component-scan base-package="com.package" />

    <sws:annotation-driven />

    <bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
        <property name="soapVersion">
            <util:constant static-field="org.springframework.ws.soap.SoapVersion.SOAP_11" />
        </property>
    </bean>

    <bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
        <constructor-arg ref="messageFactory"/>
        <property name="defaultUri" value="https://example/address/hidden"/>
        <property name="marshaller" value="marshaller" />
        <property name="unmarshaller" value="marshaller" />
    </bean>

    <bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
          <property name="contextPath" value="com.package.request:com.package.request" />
          </bean>
</beans>

私のサービスクライアントクラス

@Component
public class NorServiceClient implements NorService {

    @Autowired
    private WebServiceTemplate wsTemplate;

    public void setDefaultUri(String defaultUri) {
        wsTemplate.setDefaultUri(defaultUri);
    }

    public ApplicationResponse downloadFileList(ApplicationRequest request) {
        // Command: DownloadFileList
        return (ApplicationResponse) wsTemplate.marshalSendAndReceive(request);
    }
}

そして私のテストケース:

public class AppTest extends TestCase {

    private ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/appContext.xml");

    @Test
    public void testApplicationRequest() {
        assertNotNull(new Object());
        System.out.println("Context: " + context);
        NorService norService = (NorService) context.getBean("norServiceClient");
        ApplicationRequest request = new ApplicationRequest();
        nordeaService.downloadFileList(request);
    }
}

アプリを起動しても、service.downloadFileList に到達しません。コンテキストの初期化時に例外がスローされます。したがって、空の ApplicationRequest オブジェクトだけを開始したことが問題になるとは思いません。

問題はどこにあるのでしょうか? インターネットのすべての例で、同じ方法でセットアップを行いましたが、私のプロジェクトでは例外がスローされますno matching editors or conversion strategy found

4

1 に答える 1