diff -r 8c0b6bccfe47 -r 0989ad8c0860 src/share/jaxws_classes/com/sun/xml/internal/ws/client/dispatch/PacketDispatch.java --- a/src/share/jaxws_classes/com/sun/xml/internal/ws/client/dispatch/PacketDispatch.java Thu Apr 04 19:05:24 2013 -0700 +++ b/src/share/jaxws_classes/com/sun/xml/internal/ws/client/dispatch/PacketDispatch.java Tue Apr 09 14:51:13 2013 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,8 +27,10 @@ import com.sun.istack.internal.Nullable; import com.sun.xml.internal.ws.api.addressing.WSEndpointReference; +import com.sun.xml.internal.ws.api.client.ThrowableInPacketCompletionFeature; import com.sun.xml.internal.ws.api.client.WSPortInfo; import com.sun.xml.internal.ws.api.message.Packet; +import com.sun.xml.internal.ws.api.pipe.Fiber; import com.sun.xml.internal.ws.api.pipe.Tube; import com.sun.xml.internal.ws.binding.BindingImpl; import com.sun.xml.internal.ws.client.WSServiceDelegate; @@ -43,10 +45,12 @@ * @since 2.2.6 */ public class PacketDispatch extends DispatchImpl { + private final boolean isDeliverThrowableInPacket; @Deprecated public PacketDispatch(QName port, WSServiceDelegate owner, Tube pipe, BindingImpl binding, @Nullable WSEndpointReference epr) { super(port, Mode.MESSAGE, owner, pipe, binding, epr); + isDeliverThrowableInPacket = calculateIsDeliverThrowableInPacket(binding); } @@ -56,10 +60,21 @@ public PacketDispatch(WSPortInfo portInfo, Tube pipe, BindingImpl binding, WSEndpointReference epr, boolean allowFaultResponseMsg) { super(portInfo, Mode.MESSAGE, pipe, binding, epr, allowFaultResponseMsg); + isDeliverThrowableInPacket = calculateIsDeliverThrowableInPacket(binding); } public PacketDispatch(WSPortInfo portInfo, BindingImpl binding, WSEndpointReference epr) { super(portInfo, Mode.MESSAGE, binding, epr, true); + isDeliverThrowableInPacket = calculateIsDeliverThrowableInPacket(binding); + } + + private boolean calculateIsDeliverThrowableInPacket(BindingImpl binding) { + return binding.isFeatureEnabled(ThrowableInPacketCompletionFeature.class); + } + + @Override + protected void configureFiber(Fiber fiber) { + fiber.setDeliverThrowableInPacket(isDeliverThrowableInPacket); } @Override