0

我最近对自定义对象进行了一些数据库更改,我正在尝试生成一个新的 enterprise.jar 来反映这些更改。我正在关注此处的所有文档以了解该过程。我还要注意,除了一些新的依赖项之外,我之前已经按照这个过程没有错误地生成了 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:schema...> 。xsd 在此之前使用,但仅用于定义元素字符串类型;例如:<element name="sessionId" type="xsd:string" nillable="true"/>

如果我从导致错误的所有内容中删除 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:schema...>。如果我删除所有使用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 文件中没有 <wsdl:definitions...> 。

我不知道这是否是 Salesforce 生成错误 XML 文件的问题(即使在我没有对其进行任何数据库更改的沙箱中也会出现问题,包括我有一个旧但可以工作的 enterprise.jar 的生产环境),如果我没有正确的 force-wsc jar 文件,如果我没有通过正确的 Java 版本(1.8,如果不清楚,但我尝试过早期版本的 java,我只是得到了次要版本) .major 52 错误,这意味着它应该是 8,据我所知)。

任何帮助指出这里的问题是什么将不胜感激。我非常愿意接受建议。如果只是 Salesforce 给了我一个错误的 XML 文件,我可以在那里开一张票。我只是想确保在我开票之前我没有做错什么。

4

1 回答 1

0

在这方面花费了更多时间,并与从事不同 Salesforce 项目的同事协调之后,我们发现了以下内容

1 Salesforce 绝对提供了一个错误的 WSDL 文件。

2 错误 WSDL 文件的生成只是因为我使用的是 Firefox Web 浏览器。使用 Chrome 来访问 WSDL 生成解决了所有问题。

因此,对于将来遇到此问题的任何可怜的灵魂,我希望使用 Chrome 也可以为您解决它。

于 2020-06-30T21:59:54.033 回答