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