首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Salesforce Soap API生成Enterprise jar时出现问题;从Salesforce生成的WSDL XML出现问题

为Salesforce Soap API生成Enterprise jar时出现问题;从Salesforce生成的WSDL XML出现问题
EN

Stack Overflow用户
提问于 2020-06-30 07:05:50
回答 1查看 372关注 0票数 0

我最近对自定义对象进行了一些数据库更改,我正在尝试生成一个新的enterprise.jar来反映这些更改。我遵循了该过程的所有文档,这些文档位于here。我还会注意到,除了一些新的依赖项之外,我以前已经按照这个过程生成过enterprise.jar文件,没有出现任何错误。这是一个过去在我的沙箱上工作的过程,但我们已经有5年没有对数据库进行任何结构上的更改了。

遵循这些步骤是非常简单的。我在我的开发人员沙箱中使用Enterprise WSDL登录Salesforce来生成XML文件(我们显然有企业级服务,只是为了建立它)。从那里,我转到Maven存储库,从那里获取force-wsc-48.0.0.jar (根据我的沙箱的当前API版本),然后下载一些依赖项,比如rhino、ST和antlr-runtime。我将所有文件放在我的C盘的临时文件夹中,并尝试运行以下命令:

代码语言:javascript
复制
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

这就是麻烦开始的地方。运行此命令后,我遇到了以下错误:

代码语言:javascript
复制
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片段:

代码语言:javascript
复制
<!--
 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>

父架构:

代码语言:javascript
复制
<schema elementFormDefault="qualified" targetNamespace="urn:fault.enterprise.soap.sforce.com">
<import namespace="urn:enterprise.soap.sforce.com"/>

我不知道是否有必要这样做,但我会注意到XML文件中根本没有。在此之前使用xsd,但仅用于定义元素字符串类型;例如:

如果我从导致错误的所有内容中删除xsd前缀,我将得到相同的错误,但对于soap而不是xsd。第一个实例的XML代码片段:

代码语言:javascript
复制
<!-- 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前缀的所有实例,我将解决以下问题。

代码语言:javascript
复制
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文件,我可以在那里打开一个票证。在我开罚单之前,我只是想确认我没有做错什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-01 05:59:54

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

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

2生成错误的WSDL文件只是因为我使用的是Firefox web浏览器。最重要的是,使用Chrome访问WSDL生成解决了这个问题。

因此,对于将来遇到这个问题的任何可怜的人,我希望使用Chrome也能为你解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62647930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档