java - xsd:soapUI 中包含异常:org.apache.xmlbeans.XmlException:org.apache.xmlbeans.XmlException:错误:null 后出现意外的文件结尾

标签 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 包括

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

xsd 的实际位置

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

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

我的 spring-ws.xml

<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>

我的个人详细信息服务操作.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:person="http://MyWS.com/"
targetNamespace="http://MyWS.com/"
elementFormDefault="qualified">
<xsd:include schemaLocation="PersonalDetails.xsd" />
<xsd:include schemaLocation="PersonalRequest.xsd" />
</xsd:schema>

我使用的是spring+Maven+xsd+jaxb

请帮忙

非常感谢

最佳答案

发生这种情况通常是因为您没有将 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 的正确路径。

关于java - xsd:soapUI 中包含异常:org.apache.xmlbeans.XmlException:org.apache.xmlbeans.XmlException:错误:null 后出现意外的文件结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31779004/

相关文章:

java - Jaxb:如何解码 xs:任何 XML 字符串部分?

attributes - 如何在 jaxb 编码期间跳过空字段

java - 在 Hibernate 中默认为所有 FetchType.LAZY 非集合启用无代理行为

java - 本地依赖的 Gradle 依赖

java - 如何在intellij中快速重构 - 移动实例方法

c# - 从服务器资源管理器拖放到数据集和 DBML 设计器不工作

java - keytool 在 Ubuntu : incorrect magic 中不工作

javascript - 在客户端使用 JavaScript 根据 XSD 验证 XML

java - 如何在没有本地 XSD 文件的情况下根据 XML 架构验证 XML?

java - 需要 jaxb 转 xml 返回带有完整包名的 xml