Search code examples
soapcompilationwsdlsalesforcewsc

Issues generating Enterprise jar for Salesforce Soap API; issue with generated WSDL XML from Salesforce


I've recently made some databasae changes to custom objects, and I'm trying to generate a new enterprise.jar to reflect these changes. I'm following all documentation located here for the process. I'll also note, with the exception of some new dependencies, I've followed this process before with no errors to generate the enterprise.jar file. So this is a process that has worked for my sandbox in the past, but we haven't had any structural changes to the database in a solid 5 years.

Following along with the steps is simple enough. I generate the XML file from my Salesforce login in my developer sandbox utilizing Enterprise WSDL (we clearly have Enterprise level service, just so that's established). From there, I go to the Maven repository, get force-wsc-48.0.0.jar from there (as per the current API version of my sandbox), and then download a few dependencies like rhino, ST, and antlr-runtime. I get all files together in a temp folder in my C drive and try running command:

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

Here's where the trouble begins. Once I run this, I hit the following error:

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

A snipped of the XML at error line:

<!--
 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>

Parent schema:

<schema elementFormDefault="qualified" targetNamespace="urn:fault.enterprise.soap.sforce.com">
<import namespace="urn:enterprise.soap.sforce.com"/>

I don't know if it's necessary, but I'll note that there's no <xsd:schema...> at all in the XML file. xsd is used before this, but only to define element string types; eg: <element name="sessionId" type="xsd:string" nillable="true"/>

If I remove xsd prefix from everything that causes the error, I'll instead get the same error, but for soap instead of xsd. XML snippet of first instance of that:

<!-- 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>

There's no parent schema here.

Again, there is no <soap:schema...> defined in the XML. And if I remove all of the instances of using the soap prefix, I'll land on the following issue.

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)

Again, not sure if it matters, but there's no <wsdl:definitions...> in the XML file.

I don't know if this is an issue of Salesforce generating a bad XML file (the issue occurs even in sandboxes I haven't made any database changes for, including production where I have an old but working enterprise.jar), if I don't have the right force-wsc jar file, if I'm not running it through the right version of Java (1.8, if it wasn't clear, but I've tried earlier versions of java and I just get the minor.major 52 error, which means it should be 8, as far as I know).

Any help pinpointing what the issue here is would be greatly appreciated. I'm more than open to suggestions. And if it is just Salesforce giving me a bad XML file, I can open a ticket there. I just want to make sure I'm not doing something wrong before I open a ticket.


Solution

  • After spending more time on this, and after coordinating with a co-worker who works on a different Salesforce project, we've discovered the following

    1 Salesforce was absolutely giving a bad WSDL file.

    2 The generation of the bad WSDL file only occurred because I was using a Firefox web browser. Using Chrome instead to access the WSDL generation fixed the issue, of all things.

    So for any poor soul that comes across this issue in the future, I hope using Chrome fixes it for you as well.