WSDL First Provider throwing Value Does not match Pattern Soap Fault for Date object

Hi,

We have a java.util.date object in a WS response and it works fine if i am to call the connector created from its original WSDL provider. In this case i can see that the WS response comes formatted as a String (with ContentType DateTIme) of pattern yyyy-MM-dd'T'HH:mm:ss.

Issue is while we use a WSDL first provider,we are using a WSDL first Provider to implement a specification,below are the steps how i do it

  1. We create a specification in IS and use it as a signature of emptyServiceA and then create a regular WSDL provider and connector out of ServiceA.

  2. We use this as a Interface and we will create different implementation of this interface by having our own custom ServiceB which does the logic what we want . To do this we are creating a WSDL first provider using the WSDL URL from Step1's WSDL .The AutoGenerated service of this is calling ServiceB . we could have Many services likes this having the same signature. this let us have any number of implementation of the service we created in step1 with the specification

  3. So in our code we use the connector created in step1 but with _url and _port of the WSDL provider created in step2. the problem this way is with java.util.date Object fields in the response is not formatted as yyyy-MM-dd'T'HH:mm:ss in WS response and hence it throws a soap fault saying the [ISS.0088.9139]output parameters do not conform to targetOutputSignature errorcode=DT-001 pathName=<<PathToDateObjectFieldintheResponse>> errorMessage=[ISC.0082.9469] Value does not match patterns

Does that make sense ? if yes, Do you know why is it happening and how can i prevent it by keeping the field as java.util.date Object itself.

I am also trying to understand how IS does the above conversion highlighted as bold by default in direct WS calls. Any leads would be much appreciated. Thanks for your time!

Regards,
Divya

Hi Divya,

are you sure that this is a WSDL first approach?
In my opinion, WSDL first would mean you create the WSDL somewhere outside of wM and then create the provider and concumser WSD nodes in IS or the Partner system when neccessary.
Creating a WSDL from an IS service might lead to some weird WSDLs which might fail when importing them somewhere else.
Can you check if the field is defined as type xsd:datetime in the WSDL, please?
This should lead to a field of java.util.Date in the resulting input and/or output documents then.

Regards,
Holger

Thanks Holger_von, My question were not clear enough. I have now edited the details in the question .

I am creating a WSDLfirst provider from another WSDL itself. difference is that the original WSDL is created in my system . we have done this to get a standard connector we could use in our code to call multiple implementations of the same specification.

and the Date field is defined as xsd:datetime in the wsdl, this works when i make the regular WS call,but when i make WSDL first provider call ,then it throws the soap fault.

If i got a WSDL from outside Wm with a java.util.date object field in it, and i create a WSDL first provider and then consumer in wM,i would still be getting the below error.

com.wm.app.b2b.server.ServiceException: [ISS.0088.9139] Output parameters do not conform to targetOutputSignature:
errorCode=DT-001
pathName=/tns:GetSomethingImplResponse/Something/DateVal
errorMessage=[ISC.0082.9469] Value does not match pattern(s)
at com.wm.app.b2b.server.wss.wssClientImpl.handleSOAPResponse(wssClientImpl.java:1512)
at pub.clientimpl.wssClient(clientimpl.java:2799)
at pub.clientimpl.soapClient(clientimpl.java:1345)
at sun.reflect.GeneratedMethodAccessor195.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.wm.app.b2b.server.JavaService.baseInvoke(JavaService.java:404)
at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:756)
at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:39)
at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:54)
at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:243)
at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)
at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:171)
at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:299)
at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:34)
at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:379)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:634)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:442)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:398)
at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:252)
at com.wm.app.b2b.server.BaseService.invoke(BaseService.java:229)
at com.wm.lang.flow.FlowInvoke.invoke(FlowInvoke.java:257)
at com.wm.lang.flow.FlowState.invokeNode(FlowState.java:535)
at com.wm.lang.flow.FlowState.step(FlowState.java:401)
at com.wm.lang.flow.FlowState.invoke(FlowState.java:372)
at com.wm.app.b2b.server.FlowSvcImpl.baseInvoke(FlowSvcImpl.java:1132)
at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:756)
at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:39)
at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:54)
at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:243)
at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)
at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:171)
at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:299)
at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:34)
at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:379)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:634)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:442)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:398)
at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:252)
at com.wm.app.b2b.server.comm.DefaultServerRequestHandler.handleMessage(DefaultServerRequestHandler.java:120)
at com.wm.app.b2b.server.HTTPMessageHandler.process(HTTPMessageHandler.java:156)
at com.wm.app.b2b.server.HTTPDispatch.handleRequest(HTTPDispatch.java:183)
at com.wm.app.b2b.server.Dispatch.run(Dispatch.java:399)
at com.wm.util.pool.PooledThread.run(PooledThread.java:127)
at java.lang.Thread.run(Thread.java:748)

Hi Divya,

can you test your WSDLs with i.e. SoapUI just to check if they are really compliant to the spec?

can you post the appropriate parts of the WSDL/XSD here for comparison?
You can rename the fields if neccessary, but keep the type or element references intact.

Regards,
Holger

I get proper response from SoapUI without a soap exception.

I have attached the dummy wsdl here. thanks!

Test.Divya.namespace.DatePOC.xml (3.8 KB)

Hi Divya,

          I created a provider WSD from the attached WSDL and then consumer WSD from the provider WSD's WSDL URL. I got a 200 OK response and didn't get any SOAP fault. Perhaps there are other steps in your implementation that might be the issue? 

Regards,
Arpitha

thanks Arpitha , which version of IS are you using?

I was getting the exception, just by invoking its consumer WSDL’s connector .

what are the input parameters you have tried?

Hi Divya,

          I tried it on 10.5 version, with a random text as the only input. Perhaps you can mention the input parameters you used and what the service in question does as well so that repro case is complete? 

Thanks,
Arpitha

you can use any random text as input …but in your implementation, Add a value for the datefield and try again.

I am on IS 10.1. Thanks!