我正在尝试为我的项目添加服务引用,并且我经常遇到同样的错误。
我创建了一个带有SOAP UI的模拟服务似乎很好,然后我尝试向这个模拟服务添加服务引用,并出现错误:
JexlExpression e = jexl.createExpression( "r.header.gender=com.sytrue.objects.Gender.valueOf('FEMALE')" );
在wsdl上导入带有命名空间urn的架构:oasis:names:tc:dss:1.0:core:schema正在加载:
Warning 14 Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: Schema with target namespace 'urn:oasis:names:tc:dss:1.0:core:schema' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/esign']/wsdl:portType[@name='EsignServiceSoap11PortType']
我已经尝试将schemaLocation直接链接到与wsdl相同的文件夹中的文件,将其链接到私有服务器中发布的url,以及发布它的公共uri。
我总是得到同样的错误,我开始觉得我可能会误解问题的根源。
非常感谢任何见解。
更新:我已经注入了urn:oasis:names:tc:dss:1.0:core:我的wsdl文件中的schema完成定义,而不是尝试导入它。当我这样做时,SOAP UI仍然正确地创建了模拟服务,但是,当我尝试添加服务引用时,在服务发现期间抛出此错误:
<wsdl:types>
<schema xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<import namespace="urn:oasis:names:tc:dss:1.0:core:schema" schemaLocation="oasis-dss-core-schema-v1.0-os.xsd"/>
</schema>
.....
</wsdl:types>
EDIT2:我在尝试创建代理时使用了Fiddler来检查http流量,如答案所示。在创建过程中,当尝试访问mockService url时,Fiddler上会出现500内部服务器错误,来自服务器的响应是“SOAPAction [null]的操作缺失”和SOAP版本[SOAP 1.2]的body元素[null]。 / p>
目前,这是我用来创建mockService的WSDL。
The document was understood, but it could not be processed.
- The WSDL document contains links that could not be resolved.
- DTD is prohibited in this XML document.
Metadata contains a reference that cannot be resolved: 'http://elite8100-3:8088/mockEsignServiceSoap11Binding?WSDL'.
The content type text/html; charset=iso-8859-1 of the response message does not match the content type of the binding (application/soap+xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 455 bytes of the response were: '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<soap:Fault>
<soap:Code>
<soap:Value>Server</soap:Value>
</soap:Code>
<soap:Reason>
<!--1 or more repetitions:-->
<soap:Text xml:lang="en">Missing operation for soapAction [null] and body element [null] with SOAP Version [SOAP 1.2]</soap:Text>
</soap:Reason>
</soap:Fault>
</soap:Body>
</soap:Envelope>'.
The remote server returned an error: (500) Internal Server Error.
If the service is defined in the current solution, try building the solution and adding the service reference again.
我已经下载了每个关联的.xsd并将它们发布在公共服务器上,我也更改了schemaLocations,因此它们指向此公共服务器上的地址,但是,问题似乎与WSDL结构有关。
答案 0 :(得分:1)
更新前的主要问题必须是您的语法错误。您说<schema xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
工具预期<schema xmlns="http://www.w3.org/2001/XMLSchema">
的位置。要简单地导入外部XSD文件,上面的默认XML命名空间就可以解决所有这些问题。
架构导入/包含可能非常混乱;对于那些情况,当你把它们放在WSDL中时,正如你所建议的那样,它很容易出错,因为它不是简单的剪切和粘贴的情况。例如,某些工具可能在处理最初基于xsd:include的引用时遇到问题;变色龙包括不能在WSDL中复制;并且你的所有xsd:imports都不能使用schemaLocation属性。
要解决与损坏的引用相关的问题,我强烈建议使用HTTP调试器,例如Fiddler。它至少会告诉你你忘记清理哪些引用,或者你的模拟解决方案没有正确设置的任何HTTP头。
如果上述问题仍然存在问题,则必须发布修改后的WSDL。