cancel
Showing results for 
Search instead for 
Did you mean: 

Issue for invoking exposed blueprism process which accepts variables of type "Number"

AmitMane
Level 3
Hello team,

I have created blueprism process which accepts parameters of type "Number". I exposed this process from settings. WSDL for this process shows type for these input variables as "s:decimal". Now I am trying to invoke this exposed process from Java code as SOAP call. In java code, I used data type for blueprism process's input variable as "BigDecimal". When I run my code I get strange exception with message as below:
"Couldn't process soap inputs - Can only deal with a single request"
When I run my code there were no running process in blueprism.

When blueprism process exposes variables of type "Text" and Java code uses variable of type "String" then same code works fine. I am facing issue for "Number" type.

Any idea, how can I fix this issue? 
Thanks in advance.

------------------------------
Amit Mane
------------------------------
13 REPLIES 13

ewilson
Staff
Staff
IBM seems to think that BigDecimal or BigInteger should map to .NET's Decimal. You might try BigInteger and see how that works.

https://www.ibm.com/docs/en/SSTVLU_8.6.0/com.ibm.websphere.extremescale.doc/rxsxdfequiv.html

Cheers,

------------------------------
Eric Wilson
Director, Partner Integrations for Digital Exchange
Blue Prism
------------------------------

Thanks Eric for your response. I tried with BigInteger but still getting same exception. And I referred document below.

https://www.ibm.com/docs/en/odm/8.0.1?topic=classes-schema-type-mapping

------------------------------
Amit Mane
------------------------------

Hi @AmitMane,

Can you catch the network request using something like Fiddler, so we can see what the actual SOAP payload looks like?

Here's the WSDL of a test process I exposed as a SOAP web service that accepts a Number as input:
<wsdl:definitions xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="urn:blueprism:webservice:generaltest" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="GeneralTestService" targetNamespace="urn:blueprism:webservice:generaltest">
	<wsdl:types>
		<s:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="urn:blueprism:webservice:generaltest"/>
	</wsdl:types>
	<wsdl:message name="GeneralTestRequest">
		<wsdl:part name="LoopCount" type="s:decimal"/>
	</wsdl:message>
	<wsdl:message name="GeneralTestResponse">
		<wsdl:part name="Count" type="s:decimal"/>
	</wsdl:message>
	<wsdl:portType name="GeneralTestPortType">
		<wsdl:operation name="GeneralTest">
			<wsdl:input message="tns:GeneralTestRequest"/>
			<wsdl:output message="tns:GeneralTestResponse"/>
		</wsdl:operation>
	</wsdl:portType>
	<wsdl:binding name="GeneralTestSoapBinding" type="tns:GeneralTestPortType">
		<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
		<wsdl:operation name="GeneralTest">
			<soap:operation soapAction="" style="rpc"/>
			<wsdl:input>
				<soap:body use="encoded" namespace="urn:blueprism:webservice:generaltest" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="encoded" namespace="urn:blueprism:webservice:generaltest" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
	<wsdl:service name="GeneralTestService">
		<wsdl:port name="GeneralTestSoap" binding="tns:GeneralTestSoapBinding">
			<soap:address location="http://localhost:8181/ws/GeneralTest"/>
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>


We can see the input parameter, LoopCount, is defined as type s:decimal

Now here's an example of a request I made from SoapUI to this test process: 
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:blueprism:webservice:generaltest">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:GeneralTest soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <LoopCount xsi:type="xsd:decimal">2</LoopCount>
      </urn:GeneralTest>
   </soapenv:Body>
</soapenv:Envelope>​

Notice the input number is defined as xsd:decimal in the payload. We need to see how Java is defining that value.

Cheers,

------------------------------
Eric Wilson
Director, Partner Integrations for Digital Exchange
Blue Prism
------------------------------

Hi Eric, 
Below is the WSDL for Blue Prism process which accepts Number type.

<wsdl:definitions
	xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
	xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
	xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
	xmlns:tns="urn:blueprism:webservice:calculation"
	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
	xmlns:s="http://www.w3.org/2001/XMLSchema"
	xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
	xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="CalculationService" targetNamespace="urn:blueprism:webservice:calculation">
	<wsdl:types>
		<s:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="urn:blueprism:webservice:calculation"/>
	</wsdl:types>
	<wsdl:message name="CalculationRequest">
		<wsdl:part name="Var1" type="s:decimal"/>
		<wsdl:part name="Var2" type="s:decimal"/>
	</wsdl:message>
	<wsdl:message name="CalculationResponse">
		<wsdl:part name="Sum" type="s:decimal"/>
	</wsdl:message>
	<wsdl:portType name="CalculationPortType">
		<wsdl:operation name="Calculation">
			<wsdl:input message="tns:CalculationRequest"/>
			<wsdl:output message="tns:CalculationResponse"/>
		</wsdl:operation>
	</wsdl:portType>
	<wsdl:binding name="CalculationSoapBinding" type="tns:CalculationPortType">
		<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
		<wsdl:operation name="Calculation">
			<soap:operation soapAction="" style="rpc"/>
			<wsdl:input>
				<soap:body use="encoded" namespace="urn:blueprism:webservice:calculation" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="encoded" namespace="urn:blueprism:webservice:calculation" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
	<wsdl:service name="CalculationService">
		<wsdl:port name="CalculationSoap" binding="tns:CalculationSoapBinding">
			<soap:address location="http://CLM-AUS-UT03OA:8181/ws/Calculation"/>
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>​

Where Var1, Var2 are of Number type.

And below is SOAP message to invoke above process. I managed to get it by debugging the code.

<soapenv:Envelope
	xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<soapenv:Body>
		<ns1:Calculation soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
			xmlns:ns1="urn:blueprism:webservice:calculation">
			<Var1 xsi:type="xsd:decimal">15</Var1>
			<Var2 xsi:type="xsd:decimal">12</Var2>
		</ns1:Calculation>
	</soapenv:Body>
</soapenv:Envelope>​

And below is SOAP message to invoke process which accepts parameters of type String. And this call works fine

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<soapenv:Body>
		<ns1:CalculationWithParam soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:blueprism:webservice:calculationwithparam">
			<Num1 xsi:type="xsd:string">15</Num1>
			<Num2 xsi:type="xsd:string">12</Num2>
		</ns1:CalculationWithParam>
	</soapenv:Body>
</soapenv:Envelope>​


------------------------------
Amit Mane
------------------------------

@AmitMane,

One difference I noticed is that your SOAP envelope (in the request) is missing ​a namespace definition. I'm not sure that this would cause the issue, but it is a difference. In the case of my request you can see the following namespace:

xmlns:urn="urn:blueprism:webservice:generaltest"


There's no equivalent in yours.

Another question, when you exposed the process what options, if any, did you select within Blue Prism? Here's a screenshot of the process options page. Did you select either of the checkboxes?

15912.png
Cheers,



------------------------------
Eric Wilson
Director, Partner Integrations for Digital Exchange
Blue Prism
------------------------------

Hi Eric,

I also noticed the difference that you mentioned regarding
xmlns:urn="urn:blueprism:webservice:generaltest"​

But without this I managed to pass the parameters of type String, Date, DateTime, Time, Timespan. So I think this will not be a problem. 

And today when I tried to pass parameter of type "Flag", I got same error as "Number". 

While exposing process, I didn't checked any check box. 

15916.png


------------------------------
Amit Mane
------------------------------

Hi @AmitMane,

I assume you're doing all this testing on your local machine, is that correct? If so, do you have access to a separate machine that you could try exposing that VBO on? The only other thing I can thing of would to try checking the Enforce Document/Literal Encoding option and see if that works for you.​

Cheers,

------------------------------
Eric Wilson
Director, Integrations and Enablement
Blue Prism Digital Exchange
------------------------------

Hi Eric,

I have Blue Prism installed on separate Virtual machine and I am invoking it via other development machine. And we didn't enabled "Enforce Document/Literal Encoding" option. If I enable this option then wsdl format changes. And we are working to dynamically parse any wsdl and invoke process. I tried by enabling "With RPC encoding, use legacy namespacing". But it give me same error. 


------------------------------
Amit Mane
------------------------------

Amit,

What Java frameworks or libraries are you using in your application to perform the SOAP processing which JVM version?

Java, in general, doesn't seem to have an issue invoking BP services that expose parameters of type Number or Flag. We know this because we regularly use SoapUI, which is entirely Java, for testing.

Cheers,



------------------------------
Eric Wilson
Director, Integrations and Enablement
Blue Prism Digital Exchange
------------------------------