Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用org.eclipse.wst.WSDL.util.WSDLResourceImpl加载WSDL文件时出现Nullpointer异常_Java_Eclipse_Wsdl_Emf - Fatal编程技术网

Java 使用org.eclipse.wst.WSDL.util.WSDLResourceImpl加载WSDL文件时出现Nullpointer异常

Java 使用org.eclipse.wst.WSDL.util.WSDLResourceImpl加载WSDL文件时出现Nullpointer异常,java,eclipse,wsdl,emf,Java,Eclipse,Wsdl,Emf,当我们使用org.eclipse.wst.WSDL.util.WSDLResourceImpl加载WSDL文件时,遇到了一个问题,并且发现了Nullpointer异常问题 我们已经注意到,org.eclipse.wst.wsdl.internal.impl.MessageImpl中的以下代码在一个类加载器中初始化EMF模型,而第二个类加载器调用 EMF WSDl加载 public void handleUnreconciledElement(Element child, Collection r

当我们使用org.eclipse.wst.WSDL.util.WSDLResourceImpl加载WSDL文件时,遇到了一个问题,并且发现了Nullpointer异常问题

我们已经注意到,org.eclipse.wst.wsdl.internal.impl.MessageImpl中的以下代码在一个类加载器中初始化EMF模型,而第二个类加载器调用 EMF WSDl加载

public void handleUnreconciledElement(Element child, Collection remainingModelObjects)
  {
    switch (WSDLUtil.getInstance().getWSDLType(child))
    {
      case WSDLConstants.PART:
      {
    Part part = ((WSDLPackage)EPackage.Registry.INSTANCE.getEPackage(WSDLPackage.eNS_URI)).getWSDLFactory().createPart();
    part.setEnclosingDefinition(getEnclosingDefinition());
    part.setElement(child);
    getEParts().add(part);
    break;
      }
      default:
      {
    super.handleUnreconciledElement(child, remainingModelObjects);
    break;
      }
    }
  }
Nullpointer异常发生在这里

Part Part=((WSDLPackage)EPackage.Registry.INSTANCE.getEPackage(WSDLPackage.eNS_URI)).getWSDLFactory().createPart()

因为注册表没有第二个类加载器的WSDL命名空间URI的条目

上述问题的详细情况如下所示

MessageImpl.handleUnreconciledElement(Element, Collection) line: 411    
MessageImpl(WSDLElementImpl).reconcileContents(Element) line: 1296  
MessageImpl(WSDLElementImpl).reconcile(Element) line: 1242  
MessageImpl(WSDLElementImpl).changeAttribute(EAttribute) line: 1215 
MessageImpl.changeAttribute(EAttribute) line: 467   
MessageImpl(WSDLElementImpl).eNotify(Notification) line: 472    
MessageImpl(WSDLElementImpl).setElementGen(Element) line: 181   
MessageImpl(WSDLElementImpl).setElement(Element) line: 367  
DefinitionImpl.handleUnreconciledElement(Element, Collection) line: 1785    
DefinitionImpl(WSDLElementImpl).reconcileContents(Element) line: 1296   
DefinitionImpl(WSDLElementImpl).reconcile(Element) line: 1242   
DefinitionImpl(WSDLElementImpl).changeAttribute(EAttribute) line: 1215  
DefinitionImpl.changeAttribute(EAttribute) line: 1997   
DefinitionImpl(WSDLElementImpl).eNotify(Notification) line: 472 
DefinitionImpl.eNotify(Notification) line: 515  
DefinitionImpl(WSDLElementImpl).setElementGen(Element) line: 181    
DefinitionImpl(WSDLElementImpl).setElement(Element) line: 367   
DefinitionImpl.setElement(Element) line: 1704   
DefinitionImpl.createDefinition(Node, String, boolean) line: 1511   
WSDLResourceImpl.handleDefinitionElement(Element) line: 572 
WSDLResourceImpl.findDefinition(Element) line: 540  
WSDLResourceImpl.doLoad(InputSource, Map) line: 285 
WSDLResourceImpl.doLoad(InputStream, Map) line: 358 
WSDLResourceImpl(ResourceImpl).load(InputStream, Map<?,?>) line: 1505   
protected void handleSchemaElement(Element element, boolean isMeta)
  {
    XSDSchema xsdSchema;
    if (element == null)
    {
      xsdSchema = XSDFactory.eINSTANCE.createXSDSchema();
      xsdSchema.getQNamePrefixToNamespaceMap().put(null, XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001);
    }
    else if (isMeta)
    {
      xsdSchema = XSDSchemaImpl.createMetaSchema(element);
    }
    else
    {
      xsdSchema = XSDSchemaImpl.createSchema(element);
    }
    getContents().add(xsdSchema);
  }
现在,XSD也会出现同样的问题,因为当我们使用org.eclipse.XSD.util.XSDResourceImpl加载XSD文件时,会出现下面的方法

XSDResourceImpl.handleSchemaElement(元素,布尔值)

这里的代码如下所示

MessageImpl.handleUnreconciledElement(Element, Collection) line: 411    
MessageImpl(WSDLElementImpl).reconcileContents(Element) line: 1296  
MessageImpl(WSDLElementImpl).reconcile(Element) line: 1242  
MessageImpl(WSDLElementImpl).changeAttribute(EAttribute) line: 1215 
MessageImpl.changeAttribute(EAttribute) line: 467   
MessageImpl(WSDLElementImpl).eNotify(Notification) line: 472    
MessageImpl(WSDLElementImpl).setElementGen(Element) line: 181   
MessageImpl(WSDLElementImpl).setElement(Element) line: 367  
DefinitionImpl.handleUnreconciledElement(Element, Collection) line: 1785    
DefinitionImpl(WSDLElementImpl).reconcileContents(Element) line: 1296   
DefinitionImpl(WSDLElementImpl).reconcile(Element) line: 1242   
DefinitionImpl(WSDLElementImpl).changeAttribute(EAttribute) line: 1215  
DefinitionImpl.changeAttribute(EAttribute) line: 1997   
DefinitionImpl(WSDLElementImpl).eNotify(Notification) line: 472 
DefinitionImpl.eNotify(Notification) line: 515  
DefinitionImpl(WSDLElementImpl).setElementGen(Element) line: 181    
DefinitionImpl(WSDLElementImpl).setElement(Element) line: 367   
DefinitionImpl.setElement(Element) line: 1704   
DefinitionImpl.createDefinition(Node, String, boolean) line: 1511   
WSDLResourceImpl.handleDefinitionElement(Element) line: 572 
WSDLResourceImpl.findDefinition(Element) line: 540  
WSDLResourceImpl.doLoad(InputSource, Map) line: 285 
WSDLResourceImpl.doLoad(InputStream, Map) line: 358 
WSDLResourceImpl(ResourceImpl).load(InputStream, Map<?,?>) line: 1505   
protected void handleSchemaElement(Element element, boolean isMeta)
  {
    XSDSchema xsdSchema;
    if (element == null)
    {
      xsdSchema = XSDFactory.eINSTANCE.createXSDSchema();
      xsdSchema.getQNamePrefixToNamespaceMap().put(null, XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001);
    }
    else if (isMeta)
    {
      xsdSchema = XSDSchemaImpl.createMetaSchema(element);
    }
    else
    {
      xsdSchema = XSDSchemaImpl.createSchema(element);
    }
    getContents().add(xsdSchema);
  }
在这里,XSDFcatory用于流动方式

xsdSchema=XSDFactory.eINSTANCE.createXSDSchema()

因此,我们想知道为什么不能在org.eclipse.wst.wsdl.internal.impl.MessageImpl中更改此代码,如下所示,这可以解决问题,并且与XSD行为一致

 public void handleUnreconciledElement(Element child, Collection remainingModelObjects)
   {
     switch (WSDLUtil.getInstance().getWSDLType(child))
     {
       case WSDLConstants.PART:
       {
     Part part = WSDLFactory.eINSTANCE.createPart();
     part.setEnclosingDefinition(getEnclosingDefinition());
     part.setElement(child);
     getEParts().add(part);
     break;
       }
       default:
       {
     super.handleUnreconciledElement(child, remainingModelObjects);
     break;
       }
     }
  }
否则,请告知我们是否有其他解决此问题的替代方案。显然,当存在多个类加载器时,类加载会导致EPackage.Registry.INSTANCE中出现问题

我们还有两个疑问

1) 为什么注册表是每个类加载器。如果是这样的话,那么当EMF一经初始化就不允许再次初始化时,如何为多个类加载器填充注册表

2) 同样在org.eclipse.wst.wsdl.internal.impl.MessageImpl中,为什么不能使用WSDFactory.eINSTANCE代替注册表

请让我们知道,这对我们正在进行的项目之一非常重要。我们需要有非常高优先级的解决方案

谢谢和问候 阿南