6

我尝试按照 API 文档建议的方式关闭 WSDL4J (1.6.2) 中的导入文档:

  wsdlReader.setFeature("javax.wsdl.importDocuments", false);

事实上,它会停止导入使用wsdl:import标记声明的 XML 模式文件,但会停止导入使用xs:import标记声明的文件。

示例文件的以下代码片段 [参见字母末尾]

http://www.ibspan.waw.pl/~gawinec/example.wsdl

返回以下异常:

javax.wsdl.WSDLException: WSDLException (at /definitions/types/xs:schema):
faultCode=OTHER_ERROR: An error occurred trying to resolve schema referenced
at 'EchoExceptions.xsd', relative to
'http://www.ibspan.waw.pl/~gawinec/example.wsdl'.:
java.io.FileNotFoundException: This file was not found:
http://www.ibspan.waw.pl/~gawinec/EchoExceptions.xsd
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseTypes(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at IsolatedExample.main(IsolatedExample.java:15)
Caused by: java.io.FileNotFoundException: This file was not found:
http://www.ibspan.waw.pl/~gawinec/EchoExceptions.xsd
    at com.ibm.wsdl.util.StringUtils.getContentAsInputStream(Unknown Source)
    ... 10 more

你能建议我解决这个问题吗?我只是不想导入外部 XML 模式。

问候, Maciej


import javax.wsdl.WSDLException;
import javax.wsdl.factory.WSDLFactory;
import javax.wsdl.xml.WSDLReader;

public class IsolatedExample {
  public static void main(String[] args) {

    WSDLFactory wsdlFactory;
    try {
      wsdlFactory = WSDLFactory.newInstance();
      WSDLReader wsdlReader = wsdlFactory.newWSDLReader();
      wsdlReader.setFeature("javax.wsdl.verbose", false);
      wsdlReader.setFeature("javax.wsdl.importDocuments", false);
      wsdlReader.readWSDL("http://www.ibspan.waw.pl/~gawinec/example.wsdl");
    } catch (WSDLException e) {
      e.printStackTrace();
    }
  }
}
4

2 回答 2

1

快速浏览一下 WSDL4J(我已经有一段时间没有直接使用这个项目了)表明没有专门的选项来阻止读取导入的模式。您可能偶然发现了 WSDL4J 反序列化模式机制中的一个错误。也就是说,如果您对任何模式的内容不感兴趣,包括那些内联在 WSDL 文档中的内容,您可以注册自己的扩展注册表(只需修改 PopulatedExtensionRegistry 类以省略 SchemaDeserializer)。

具体来说,省略以下几行:

mapExtensionTypes(Types.class, SchemaConstants.Q_ELEM_XSD_1999,
    SchemaImpl.class);
registerDeserializer(Types.class, SchemaConstants.Q_ELEM_XSD_1999,
    new SchemaDeserializer());
registerSerializer(Types.class, SchemaConstants.Q_ELEM_XSD_1999,
    new SchemaSerializer());

mapExtensionTypes(Types.class, SchemaConstants.Q_ELEM_XSD_2000,
    SchemaImpl.class);
registerDeserializer(Types.class, SchemaConstants.Q_ELEM_XSD_2000,
    new SchemaDeserializer());
registerSerializer(Types.class, SchemaConstants.Q_ELEM_XSD_2000,
    new SchemaSerializer());

mapExtensionTypes(Types.class, SchemaConstants.Q_ELEM_XSD_2001,
    SchemaImpl.class);
registerDeserializer(Types.class, SchemaConstants.Q_ELEM_XSD_2001,
    new SchemaDeserializer());
registerSerializer(Types.class, SchemaConstants.Q_ELEM_XSD_2001,
    new SchemaSerializer());
于 2010-01-09T03:43:48.773 回答
0

我没有将 Java 用于 Web 服务,但是您是否尝试过为您导入的架构设置绝对路径?也许它正在尝试加载本地文件。

您也可以尝试嗅探电线以查看您是否正在发出请求,也许它的格式不正确。

0.02 美元

于 2009-09-15T10:21:39.777 回答