Details
-
Bug
-
Resolution: Fixed
-
Low
-
None
-
3.12.1
-
3.12
-
Description
Hello,
I was playing around the SOAP client to edit some Worklog entries. I assumes that the following code would be able to change the comment of a Worklog entry:
public class WorklogTest { public static void main(String[] args) throws Exception { URL url = new URL("http://localhost:8080/rpc/soap/jirasoapservice-v2"); JiraSoapServiceServiceLocator jiraSoapServiceGetter = new JiraSoapServiceServiceLocator(); JiraSoapService jiraSoapService = jiraSoapServiceGetter.getJirasoapserviceV2(url); String token = jiraSoapService.login("admin", "admin"); RemoteWorklog[] logs = jiraSoapService.getWorklogs(token, "ONE-1"); if (logs.length > 0) { logs[0].setComment("Qwerty"); jiraSoapService.updateWorklogAndAutoAdjustRemainingEstimate(token, logs[0]); } } }
However, when I try to execute the code I get the following exception:
Exception in thread "main" AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException faultSubcode: faultString: com.atlassian.jira.rpc.exception.RemoteValidationException: Errors: {timeLogged=Invalid time duration entered.} Error Messages: [] faultActor: faultNode: faultDetail: {}com.atlassian.jira.rpc.exception.RemoteValidationException:null {http://xml.apache.org/axis/}hostname:honey2.sydney.atlassian.com com.atlassian.jira.rpc.exception.RemoteValidationException: Errors: {timeLogged=Invalid time duration entered.} Error Messages: [] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:494) at java.lang.Class.newInstance0(Class.java:350) at java.lang.Class.newInstance(Class.java:303) at org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer.java:104) at org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer.java:90) at com.atlassian.jira.rpc.exception.RemoteValidationException.getDeserializer(RemoteValidationException.java:75) 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:585) at org.apache.axis.encoding.ser.BaseDeserializerFactory.getSpecialized(BaseDeserializerFactory.java:154) at org.apache.axis.encoding.ser.BaseDeserializerFactory.getDeserializerAs(BaseDeserializerFactory.java:84) at org.apache.axis.encoding.DeserializationContext.getDeserializer(DeserializationContext.java:464) at org.apache.axis.encoding.DeserializationContext.getDeserializerForType(DeserializationContext.java:547) at org.apache.axis.message.SOAPFaultDetailsBuilder.onStartChild(SOAPFaultDetailsBuilder.java:157) at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:533) at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:220) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:322) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1693) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242) at javax.xml.parsers.SAXParser.parse(SAXParser.java:375) at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227) at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696) at org.apache.axis.Message.getSOAPEnvelope(Message.java:435) at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62) at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206) at org.apache.axis.client.Call.invokeEngine(Call.java:2784) at org.apache.axis.client.Call.invoke(Call.java:2767) at org.apache.axis.client.Call.invoke(Call.java:2443) at org.apache.axis.client.Call.invoke(Call.java:2366) at org.apache.axis.client.Call.invoke(Call.java:1812) at _soapclient.JirasoapserviceV2SoapBindingStub.updateWorklogAndAutoAdjustRemainingEstimate(JirasoapserviceV2SoapBindingStub.java:5920) at com.atlassian.jira_soapclient.WorklogTest.main(WorklogTest.java:33)
This seems the be caused by the fact that the server expects a different interval format as input from the one it returns when querying an issue. When the server returns a Worklog it sets Worklog.timeSpent to a human readable string (e.g. 15 days, 3 hours). However, when processing an input Worklog the server expects Worklog.timeSpent to be set to a JIRA input interval (e.g 15d 3h).
Later,
Brenden.