我最近对自定义对象进行了一些数据库更改,我正在尝试生成一个新的enterprise.jar来反映这些更改。我遵循了该过程的所有文档,这些文档位于here。我还会注意到,除了一些新的依赖项之外,我以前已经按照这个过程生成过enterprise.jar文件,没有出现任何错误。这是一个过去在我的沙箱上工作的过程,但我们已经有5年没有对数据库进行任何结构上的更改了。
遵循这些步骤是非常简单的。我在我的开发人员沙箱中使用Enterprise WSDL登录Salesforce来生成XML文件(我们显然有企业级服务,只是为了建立它)。从那里,我转到Maven存储库,从那里获取force-wsc-48.0.0.jar (根据我的沙箱的当前API版本),然后下载一些依赖项,比如rhino、ST和antlr-runtime。我将所有文件放在我的C盘的临时文件夹中,并尝试运行以下命令:
java -classpath C:\temp\force-wsc-48.0.0.jar;C:\temp\rhino1_7R4\js.jar;C:\temp\ST-4.3.1.jar;\jdk\jdk1.8.0_251\lib\tools.jar;C:\temp\antlr-runtime-3.5.jar com.sforce.ws.tools.wsdlc C:\temp\enterprise.wsdl C:\temp\enterprise.jar这就是麻烦开始的地方。运行此命令后,我遇到了以下错误:
Exception in thread "main" com.sforce.ws.wsdl.WsdlParseException: Parse error: Found invalid XML. could not determine namespace bound to element prefix xsd (position: TEXT seen ...ration value="ACTIONCALL_DUPLICATE_INPUT_PARAM">\r\n<xsd:annotation>... @17360:17)
at com.sforce.ws.wsdl.WsdlParser.next(WsdlParser.java:94)
at com.sforce.ws.wsdl.Definitions.read(Definitions.java:111)
at com.sforce.ws.wsdl.WsdlFactory.createFromInputStream(WsdlFactory.java:69)
at com.sforce.ws.wsdl.WsdlFactory.create(WsdlFactory.java:49)
at com.sforce.ws.codegen.Generator.generate(Generator.java:94)
at com.sforce.ws.tools.wsdlc.run(wsdlc.java:115)
at com.sforce.ws.tools.wsdlc.run(wsdlc.java:149)
at com.sforce.ws.tools.wsdlc.main(wsdlc.java:71)
Caused by: com.sforce.ws.ConnectionException: Found invalid XML. could not determine namespace bound to element prefix xsd (position: TEXT seen ...ration value="ACTIONCALL_DUPLICATE_INPUT_PARAM">\r\n<xsd:annotation>... @17360:17)
at com.sforce.ws.parser.XmlInputStream.next(XmlInputStream.java:138)
at com.sforce.ws.wsdl.WsdlParser.next(WsdlParser.java:90)
... 7 more
Caused by: com.sforce.ws.parser.XmlPullParserException: could not determine namespace bound to element prefix xsd (position: TEXT seen ...ration value="ACTIONCALL_DUPLICATE_INPUT_PARAM">\r\n<xsd:annotation>... @17360:17)
at com.sforce.ws.parser.MXParser.parseStartTag(MXParser.java:1826)
at com.sforce.ws.parser.MXParser.nextImpl(MXParser.java:1144)
at com.sforce.ws.parser.MXParser.next(MXParser.java:1111)
at com.sforce.ws.parser.XmlInputStream.next(XmlInputStream.java:136)
... 8 more错误行处的XML片段:
<!--
These are the extension code to provide additional error information
-->
<simpleType name="ExtendedErrorCode">
<restriction base="xsd:string">
<enumeration value="ACTIONCALL_DUPLICATE_INPUT_PARAM">
<xsd:annotation>
<xsd:documentation>
Errors with this extended error code have the following properties: severity, actionCallName, parameterName
</xsd:documentation>
</xsd:annotation>
</enumeration>
<enumeration value="ACTIONCALL_DUPLICATE_OUTPUT_PARAM">
<xsd:annotation>
<xsd:documentation>
Errors with this extended error code have the following properties: severity, actionCallName, parameterName
</xsd:documentation>
</xsd:annotation>
</enumeration>父架构:
<schema elementFormDefault="qualified" targetNamespace="urn:fault.enterprise.soap.sforce.com">
<import namespace="urn:enterprise.soap.sforce.com"/>我不知道是否有必要这样做,但我会注意到XML文件中根本没有。在此之前使用xsd,但仅用于定义元素字符串类型;例如:
如果我从导致错误的所有内容中删除xsd前缀,我将得到相同的错误,但对于soap而不是xsd。第一个实例的XML代码片段:
<!-- Soap Binding -->
<binding name="SoapBinding" type="tns:Soap">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="login">
<soap:operation soapAction=""/>
<input>
<soap:header use="literal" message="tns:Header" part="LoginScopeHeader"/>
<soap:body parts="parameters" use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>这里没有父模式。
同样,在XML中没有定义。如果我删除了使用soap前缀的所有实例,我将解决以下问题。
Exception in thread "main" com.sforce.ws.wsdl.WsdlParseException: targetNamespace not specified in wsdl:definitions
at com.sforce.ws.wsdl.Definitions.read(Definitions.java:115)
at com.sforce.ws.wsdl.WsdlFactory.createFromInputStream(WsdlFactory.java:69)
at com.sforce.ws.wsdl.WsdlFactory.create(WsdlFactory.java:49)
at com.sforce.ws.codegen.Generator.generate(Generator.java:94)
at com.sforce.ws.tools.wsdlc.run(wsdlc.java:115)
at com.sforce.ws.tools.wsdlc.run(wsdlc.java:149)
at com.sforce.ws.tools.wsdlc.main(wsdlc.java:71)同样,我不确定这是否重要,但是XML文件中没有。
我不知道这是不是Salesforce生成了一个坏的XML文件的问题(这个问题甚至发生在我没有做任何数据库更改的沙箱中,包括我有一个旧的但可以工作的enterprise.jar的生产环境),如果我没有正确的force-wsc jar文件,如果我没有通过正确的Java版本运行它(1.8,如果不清楚,但我已经尝试过java的早期版本,我只得到了minor.major 52错误,据我所知,这意味着它应该是8)。
任何帮助找出问题所在的人都将不胜感激。我非常乐于接受建议。如果只是Salesforce给了我一个坏的XML文件,我可以在那里打开一个票证。在我开罚单之前,我只是想确认我没有做错什么。
发布于 2020-07-01 05:59:54
在花了更多的时间在这上面,并与一个从事不同Salesforce项目的同事协调之后,我们发现了以下内容
%1 Salesforce绝对提供了错误的WSDL文件。
2生成错误的WSDL文件只是因为我使用的是Firefox web浏览器。最重要的是,使用Chrome访问WSDL生成解决了这个问题。
因此,对于将来遇到这个问题的任何可怜的人,我希望使用Chrome也能为你解决这个问题。
https://stackoverflow.com/questions/62647930
复制相似问题