com.sun.xml.ws.protocol.soap.ClientMUTube Maven / Gradle / Ivy
/*
* Copyright (c) 1997, 2019 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0, which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package com.sun.xml.ws.protocol.soap;
import com.sun.istack.NotNull;
import com.sun.xml.ws.api.WSBinding;
import com.sun.xml.ws.api.message.Packet;
import com.sun.xml.ws.api.pipe.NextAction;
import com.sun.xml.ws.api.pipe.Tube;
import com.sun.xml.ws.api.pipe.TubeCloner;
import com.sun.xml.ws.client.HandlerConfiguration;
import javax.xml.namespace.QName;
import javax.xml.ws.soap.SOAPFaultException;
import java.util.Set;
/**
* Performs soap mustUnderstand processing for clients.
*
* @author Rama Pulavarthi
*/
public class ClientMUTube extends MUTube {
public ClientMUTube(WSBinding binding, Tube next) {
super(binding, next);
}
protected ClientMUTube(ClientMUTube that, TubeCloner cloner) {
super(that,cloner);
}
/**
* Do MU Header Processing on incoming message (response)
*
* @return
* if all the headers in the packet are understood, returns an action to
* call the previous pipes with response packet
* @throws SOAPFaultException
* if all the headers in the packet are not understood, throws SOAPFaultException
*/
@Override @NotNull
public NextAction processResponse(Packet response) {
if (response.getMessage() == null) {
return super.processResponse(response);
}
HandlerConfiguration handlerConfig = response.handlerConfig;
if (handlerConfig == null) {
//Use from binding instead of defaults in case response packet does not have it,
//may have been changed from the time of invocation, it ok as its only fallback case.
handlerConfig = binding.getHandlerConfig();
}
Set misUnderstoodHeaders = getMisUnderstoodHeaders(response.getMessage().getHeaders(), handlerConfig.getRoles(),binding.getKnownHeaders());
if((misUnderstoodHeaders == null) || misUnderstoodHeaders.isEmpty()) {
return super.processResponse(response);
}
throw createMUSOAPFaultException(misUnderstoodHeaders);
}
public ClientMUTube copy(TubeCloner cloner) {
return new ClientMUTube(this,cloner);
}
}