Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 314661

Summary: Runtime doesn't support empty messages for requests and responses
Product: z_Archived Reporter: Andrei Shakirin <andrei.shakirin>
Component: SwordfishAssignee: Swordfish Core Inbox <swordfish.core-inbox>
Status: NEW --- QA Contact:
Severity: normal    
Priority: P3    
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:
Attachments:
Description Flags
WSDL to reproduce the problem none

Description Andrei Shakirin CLA 2010-05-27 09:41:15 EDT
Created attachment 170179 [details]
WSDL to reproduce the problem

Test case: WSDL defines operation with request messages containing no parts:
  <wsdl:message name="reserveFlightRequest"/>

It is allowed by WS-I basic profile.

Problem: calling operation causes following exception on runtime:

27.05.2010 15:34:30 org.eclipse.swordfish.plugins.cxf.support.NMROutputStream sendOutputMessage
SCHWERWIEGEND: String index out of range: -1
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
	at java.lang.String.substring(Unknown Source)
	at org.eclipse.swordfish.plugins.cxf.support.NMROutputStream.unwrapEnvelope(NMROutputStream.java:215)
	at org.eclipse.swordfish.plugins.cxf.support.NMROutputStream.getMessageContent(NMROutputStream.java:187)
	at org.eclipse.swordfish.plugins.cxf.support.NMROutputStream.createNMRMessageExchange(NMROutputStream.java:166)
	at org.eclipse.swordfish.plugins.cxf.support.NMROutputStream.sendOutputMessage(NMROutputStream.java:89)
	at org.eclipse.swordfish.plugins.cxf.support.NMROutputStream.doClose(NMROutputStream.java:77)
	at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:167)
	at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
	at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:466)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:299)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:251)
	at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
	at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
	at $Proxy122.reserveFlight(Unknown Source)
	at org.eclipse.swordfish.samples.flightreservation.sample.FlightReservationClientInvoker.performRequest(FlightReservationClientInvoker.java:62)
	at org.eclipse.swordfish.samples.flightreservation.sample.FlightReservationClientInvoker.access$0(FlightReservationClientInvoker.java:59)
	at org.eclipse.swordfish.samples.flightreservation.sample.FlightReservationClientInvoker$1.run(FlightReservationClientInvoker.java:50)
	at java.util.TimerThread.mainLoop(Unknown Source)
	at java.util.TimerThread.run(Unknown Source)
27.05.2010 15:34:30 org.apache.cxf.phase.PhaseInterceptorChain doIntercept
INFO: Interceptor has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Could not send Message.
	at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)
	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:466)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:299)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:251)
	at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
	at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
	at $Proxy122.reserveFlight(Unknown Source)
	at org.eclipse.swordfish.samples.flightreservation.sample.FlightReservationClientInvoker.performRequest(FlightReservationClientInvoker.java:62)
	at org.eclipse.swordfish.samples.flightreservation.sample.FlightReservationClientInvoker.access$0(FlightReservationClientInvoker.java:59)
	at org.eclipse.swordfish.samples.flightreservation.sample.FlightReservationClientInvoker$1.run(FlightReservationClientInvoker.java:50)
	at java.util.TimerThread.mainLoop(Unknown Source)
	at java.util.TimerThread.run(Unknown Source)
Caused by: java.io.IOException: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
	at org.eclipse.swordfish.plugins.cxf.support.NMROutputStream.sendOutputMessage(NMROutputStream.java:124)
	at org.eclipse.swordfish.plugins.cxf.support.NMROutputStream.doClose(NMROutputStream.java:77)
	at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:167)
	at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
	at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
	... 12 more
Exception in thread "Timer-3" java.lang.RuntimeException: javax.xml.ws.WebServiceException: org.apache.cxf.interceptor.Fault: Could not send Message.
	at org.eclipse.swordfish.samples.flightreservation.sample.FlightReservationClientInvoker$1.run(FlightReservationClientInvoker.java:52)
	at java.util.TimerThread.mainLoop(Unknown Source)
	at java.util.TimerThread.run(Unknown Source)
Caused by: javax.xml.ws.WebServiceException: org.apache.cxf.interceptor.Fault: Could not send Message.
	at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:142)
	at $Proxy122.reserveFlight(Unknown Source)
	at org.eclipse.swordfish.samples.flightreservation.sample.FlightReservationClientInvoker.performRequest(FlightReservationClientInvoker.java:62)
	at org.eclipse.swordfish.samples.flightreservation.sample.FlightReservationClientInvoker.access$0(FlightReservationClientInvoker.java:59)
	at org.eclipse.swordfish.samples.flightreservation.sample.FlightReservationClientInvoker$1.run(FlightReservationClientInvoker.java:50)
	... 2 more
Caused by: org.apache.cxf.interceptor.Fault: Could not send Message.
	at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)
	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:466)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:299)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:251)
	at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
	at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
	... 6 more
Caused by: java.io.IOException: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
	at org.eclipse.swordfish.plugins.cxf.support.NMROutputStream.sendOutputMessage(NMROutputStream.java:124)
	at org.eclipse.swordfish.plugins.cxf.support.NMROutputStream.doClose(NMROutputStream.java:77)
	at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:167)
	at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
	at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
	... 12 more

WSDL to reproduce the problem is attached