Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Critical
-
Resolution: Fixed
-
Affects Version/s: 2.1 RC 1
-
Fix Version/s: 2.2.0
-
Component/s: Activity - WSDL and XML splitter
-
Labels:None
Description
WSDL services (typically Document/literal) that define an optional input element using minOccurs="0", such as:
<xsd:element name="matrix" type="valuedomains:Matrix" minOccurs="0" maxOccurs="1" default="BLOSUM62"> <xsd:annotation> <xsd:documentation> Scoring (comparison) matrix to use when searching the database. Supported matrices includes: BLOSUM45, BLOSUM50, BLOSUM62, BLOSUM80, BLOSUM90, PAM30, PAM70, PAM250. </xsd:documentation> </xsd:annotation> </xsd:element>
is not honoured by Taverna's XML splitters.
The optional ports, even if not connected, are inserted with an empty string like <matrix></matrix> - when they should have been left out:
<NCBIBLASTInputParameters xmlns="gme://Taverna-caGrid.caBIG/1.0/uk.org.mygrid.cagrid.domain.ncbiblast"><alignmentsToOutput></alignmentsToOutput><blastProgram>BLASTP</blastProgram><databaseName>uniprot</databaseName><dropoff></dropoff><email>mannen@soiland-reyes.com</email><expectedThreshold></expectedThreshold><extendGap></extendGap><filter></filter><gapAlignment></gapAlignment><match></match><matrix></matrix><maxScores></maxScores><mismatch></mismatch><openGap></openGap></NCBIBLASTInputParameters>
Some services just ignore these, but this does not work with Axis 1 - based services, such as used in caGrid (this example):
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.lang.IllegalArgumentException
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.lang.IllegalArgumentException
at uk.org.mygrid.cagrid.valuedomains.Matrix.fromValue(Matrix.java:41)
at uk.org.mygrid.cagrid.valuedomains.Matrix.fromString(Matrix.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.axis.encoding.ser.EnumDeserializer.makeValue(EnumDeserializer.java:53)
at org.apache.axis.encoding.ser.SimpleDeserializer.onEndElement(SimpleDeserializer.java:171)
at org.apache.axis.encoding.DeserializerImpl.endElement(DeserializerImpl.java:502)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:171)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1140)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:238)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:386)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:148)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:319)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:450)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:285)
at org.globus.wsrf.container.ServiceThread.doPost(ServiceThread.java:676)
at org.globus.wsrf.container.ServiceThread.process(ServiceThread.java:397)
at org.globus.wsrf.container.ServiceThread.run(ServiceThread.java:302)
{http://xml.apache.org/axis/}hostname:ralph
{http://xml.apache.org/axis/}isRuntimeException:true
In the same way, nillable=true is ignored, and an empty string is inserted instead of xsi:null=true.
Contact Stian for details on example service that requires this, like the wrapped NCBI Blast service for caGrid.
Issue Links
| Related | |||
|---|---|---|---|
|
|||

This has also been reported by the user Simon Felix. For the WSDL location http://virtualsolar.org/VSO/VSOi the following body is created:
<body xmlns="http://virtualsolar.org/VSO/VSOi">
<version xmlns=""></version>
<block xmlns="">
<provider />
<source />
<instrument />
<physobs />
<time />
<wave />
<extent />
<field />
</block>
</body>
The wave element should not be present