xsd:包含soapUI中的异常:org.apache.xmlbeans.XmlException:org.apache.xmlbeans.XmlException:错误:null之后的文件意外结束

时间:2015-08-03 03:27:14

标签: java xsd jaxb wsdl spring-ws

我在soapUI中创建新项目并从URL导入wsdl文件时遇到问题。它给出了以下异常

加载[http://localhost:8080/WS/PersonalDetails.xsd]时出错:org.apache.xmlbeans.XmlException:org.apache.xmlbeans.XmlException:错误:null后文件意外结束

我的xsd包括

var iFrameCount = -1;

var scriptToInject = '<script type="text/javascript">window.top.iFrameCount++;$("iframe").each(function() {$(this).contents().find("body").append(window.top.scriptToInject);});</script>';
$("body").append(scriptToInject);

xsd的实际位置

<xsd:include schemaLocation="PersonalDetails.xsd" />
<xsd:include schemaLocation="PersonalRequest.xsd" />

我的spring-ws.xml

WS/src/main/webapp/schemas/PersonalDetails.xsd

WS/src/main/webapp/schemas/PersonalRequest.xsd

My PersonalDetailsS​​erviceOperations.xsd

<bean id="MyWSService" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition" lazy-init="true">
    <property name="schemaCollection">
        <bean class="org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection">
            <property name="inline" value="false" />
            <property name="xsds">
                <list>
                    <value>schemas/PersonalDetailsServiceOperations.xsd</value>
                </list>
            </property>
        </bean>
    </property>
    <property name="portTypeName" value="MyWSEndpoint"/>
    <property name="serviceName" value="MyWS" />
    <property name="locationUri" value="/"/>
</bean>

我正在使用spring + Maven + xsd + jaxb

请帮忙

非常感谢

1 个答案:

答案 0 :(得分:0)

通常会发生这种情况,因为您没有将WSDL的正确位置粘贴到SOAP UI中。当您在浏览器中浏览到WSDL时,spring-ws将在几乎任何url上提供它,只要它以XYZService.wsdl结尾(或者您已配置它的任何内容)。这样做的缺点是,当您在某个地方使用相对路径导入XSD时,SOAP UI会尝试根据您给出的路径解析相对路径,但就像我说的那样,这可能实际上并不是真正的路径。 WSDL。

例如,在我们的应用程序中,我们有一个Spring-ws Web服务调用ProcessService。它在http://localhost:11000/ws/service/process/ProcessService.wsdl提供,它包含使用相对路径导入的XSD。如果将此URL粘贴到SOAP UI并运行它,它会正确解析XSD的路径。但是,您可以浏览到http://localhost:11000/hello-world/ProcessService.wsdl,即使URL不正确,它仍将为您提供WSDL服务。现在,如果您使用http://localhost:11000/hello-world/ProcessService.wsdl并将其粘贴到SOAP UI中,它将无法正确解析导入XSD的相对路径,因为这不是实际的URL。在这种情况下,SOAP UI会为您提供准确的错误。

我会在浏览器中浏览您的XSD,并确保您可以看到它。然后,我将检查您粘贴到SOAP UI中的URL,并查看相对URL是否实际正确解析。如果没有,您需要提供SOAP UI的正确路径。