Hello,
how do I configure Xfire in order to use JAXB schema validation.
using JAXB alone I load the Root-Schema and set the Source's SystemID:
private Source getSource(File schemaPath) throws FileNotFoundException {
SAXSource saxSource = new SAXSource(new InputSource(
new FileInputStream(schemaPath)));
saxSource.setSystemId("file:///" + schemaPath.getAbsolutePath());
System.out.println("systemID: '" + saxSource.getSystemId() + "'");
return saxSource;
}
all imported and included schemas are sucsessfully loaded using relative
paths with this setup.
Can I achieve the same in the Spring configuration - currently I tried:
<bean name="zfzr.server.jaxb"
class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceBean">
<bean
class="de.kba.zfzr.mitteilung.zfzrServiceImpl" />
</property>
<property name="serviceClass"
value="de.kba.zfzr.mitteilung.zfzrServiceImpl" />
<property name="serviceFactory">
<ref bean="xfire.jaxbServiceFactory" />
</property>
<property name="schemas">
<list>
<value>
file:///D:\programme4\workspace\xfire.zfzr\src\main\resources\ZFZR-Mitteilung.xsd
</value>
</list>
</property>
<!-- <property name="wsdlURL" value="bookservice.wsdl" /> -->
</bean>
but then i get the following exception :
org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested
exception is org.codehaus.xfire.fault.XFireFault: Error creating validating
schema.. Nested exception is org.xml.sax.SAXParseException: src-resolve:
Cannot resolve the name 'zfzr-Mitteilung-0' to a(n) 'type definition'
component.
org.codehaus.xfire.fault.XFireFault: Error creating validating schema..
Nested exception is org.xml.sax.SAXParseException: src-resolve: Cannot
resolve the name 'zfzr-Mitteilung-0' to a(n) 'type definition' component.
at org.codehaus.xfire.fault.Soap11FaultSerializer.readMessage(
Soap11FaultSerializer.java:31)
at org.codehaus.xfire.fault.SoapFaultSerializer.readMessage(
SoapFaultSerializer.java:28)
at org.codehaus.xfire.soap.handler.ReadHeadersHandler.checkForFault(
ReadHeadersHandler.java:111)
at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(
ReadHeadersHandler.java:67)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(
HandlerPipeline.java:131)
at org.codehaus.xfire.client.Client.onReceive(Client.java:387)
at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(
HttpChannel.java:139)
at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java
:48)
at org.codehaus.xfire.handler.OutMessageSender.invoke(
OutMessageSender.java:26)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(
HandlerPipeline.java:131)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:75)
at org.codehaus.xfire.client.Client.invoke(Client.java:335)
at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java
:77)
at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)
at $Proxy21.arbeitsgang0(Unknown Source)
at de.kba.zfzr.ws.test.AG0Test.checkBookServiceFindBook(AG0Test.java:87)
at de.kba.zfzr.ws.test.AG0Test.testViaXFireServer(AG0Test.java:75)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(
NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(
TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(
TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(
BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(
TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java
:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(
TestClassMethodsRunner.java:71)
at org.junit.internal.runners.TestClassMethodsRunner.run(
TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(
TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(
BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java
:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(
JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(
TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(
RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(
RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(
RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(
RemoteTestRunner.java:196)
this seems to be the same behaviour You get with plain JAXB when You not set
the SystemId...
thanks ralf