我最近对自定义对象进行了一些数据库更改,我正在尝试生成一个新的 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 文件,我可以在那里开一张票。我只是想确保在我开票之前我没有做错什么。