feat(jdk8): move files to new folder to avoid resources compiled.
This commit is contained in:
@@ -0,0 +1,360 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2013, 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
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package com.sun.xml.internal.ws.addressing;
|
||||
|
||||
import com.sun.xml.internal.ws.addressing.model.InvalidAddressingHeaderException;
|
||||
import com.sun.xml.internal.ws.addressing.model.MissingAddressingHeaderException;
|
||||
import com.sun.xml.internal.ws.api.SOAPVersion;
|
||||
import com.sun.xml.internal.ws.api.WSBinding;
|
||||
import com.sun.xml.internal.ws.api.addressing.AddressingVersion;
|
||||
import com.sun.xml.internal.ws.api.message.AddressingUtils;
|
||||
import com.sun.xml.internal.ws.api.message.Packet;
|
||||
import com.sun.xml.internal.ws.api.model.wsdl.WSDLBoundOperation;
|
||||
import com.sun.xml.internal.ws.api.model.wsdl.WSDLFault;
|
||||
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOperation;
|
||||
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
|
||||
import com.sun.xml.internal.ws.api.model.wsdl.WSDLPort;
|
||||
import com.sun.xml.internal.ws.api.model.SEIModel;
|
||||
import com.sun.xml.internal.ws.api.model.JavaMethod;
|
||||
import com.sun.xml.internal.ws.api.model.WSDLOperationMapping;
|
||||
import com.sun.xml.internal.ws.model.JavaMethodImpl;
|
||||
import com.sun.xml.internal.ws.model.CheckedExceptionImpl;
|
||||
import com.sun.istack.internal.Nullable;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
import javax.xml.namespace.QName;
|
||||
import javax.xml.soap.Detail;
|
||||
import javax.xml.soap.SOAPConstants;
|
||||
import javax.xml.soap.SOAPException;
|
||||
import javax.xml.soap.SOAPFactory;
|
||||
import javax.xml.soap.SOAPFault;
|
||||
import javax.xml.soap.SOAPMessage;
|
||||
import javax.xml.ws.WebServiceException;
|
||||
|
||||
/**
|
||||
* @author Rama Pulavarthi
|
||||
* @author Arun Gupta
|
||||
*/
|
||||
public abstract class WsaTubeHelper {
|
||||
|
||||
public WsaTubeHelper(WSBinding binding, SEIModel seiModel, WSDLPort wsdlPort) {
|
||||
this.binding = binding;
|
||||
this.wsdlPort = wsdlPort;
|
||||
this.seiModel = seiModel;
|
||||
this.soapVer = binding.getSOAPVersion();
|
||||
this.addVer = binding.getAddressingVersion();
|
||||
|
||||
}
|
||||
|
||||
public String getFaultAction(Packet requestPacket, Packet responsePacket) {
|
||||
String action = null;
|
||||
if(seiModel != null) {
|
||||
action = getFaultActionFromSEIModel(requestPacket,responsePacket);
|
||||
}
|
||||
if (action != null) {
|
||||
return action;
|
||||
} else {
|
||||
action = addVer.getDefaultFaultAction();
|
||||
}
|
||||
if (wsdlPort != null) {
|
||||
WSDLOperationMapping wsdlOp = requestPacket.getWSDLOperationMapping();
|
||||
if (wsdlOp != null) {
|
||||
WSDLBoundOperation wbo = wsdlOp.getWSDLBoundOperation();
|
||||
return getFaultAction(wbo, responsePacket);
|
||||
}
|
||||
}
|
||||
return action;
|
||||
}
|
||||
|
||||
String getFaultActionFromSEIModel(Packet requestPacket, Packet responsePacket) {
|
||||
String action = null;
|
||||
if (seiModel == null || wsdlPort == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
try {
|
||||
SOAPMessage sm = responsePacket.getMessage().copy().readAsSOAPMessage();
|
||||
if (sm == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
if (sm.getSOAPBody() == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
if (sm.getSOAPBody().getFault() == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
Detail detail = sm.getSOAPBody().getFault().getDetail();
|
||||
if (detail == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
String ns = detail.getFirstChild().getNamespaceURI();
|
||||
String name = detail.getFirstChild().getLocalName();
|
||||
|
||||
WSDLOperationMapping wsdlOp = requestPacket.getWSDLOperationMapping();
|
||||
JavaMethodImpl jm = (wsdlOp != null) ? (JavaMethodImpl)wsdlOp.getJavaMethod() : null;
|
||||
if (jm != null) {
|
||||
for (CheckedExceptionImpl ce : jm.getCheckedExceptions()) {
|
||||
if (ce.getDetailType().tagName.getLocalPart().equals(name) &&
|
||||
ce.getDetailType().tagName.getNamespaceURI().equals(ns)) {
|
||||
return ce.getFaultAction();
|
||||
}
|
||||
}
|
||||
}
|
||||
return action;
|
||||
} catch (SOAPException e) {
|
||||
throw new WebServiceException(e);
|
||||
}
|
||||
}
|
||||
|
||||
String getFaultAction(@Nullable WSDLBoundOperation wbo, Packet responsePacket) {
|
||||
String action = AddressingUtils.getAction(responsePacket.getMessage().getHeaders(), addVer, soapVer);
|
||||
if (action != null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
action = addVer.getDefaultFaultAction();
|
||||
if (wbo == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
try {
|
||||
SOAPMessage sm = responsePacket.getMessage().copy().readAsSOAPMessage();
|
||||
if (sm == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
if (sm.getSOAPBody() == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
if (sm.getSOAPBody().getFault() == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
Detail detail = sm.getSOAPBody().getFault().getDetail();
|
||||
if (detail == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
String ns = detail.getFirstChild().getNamespaceURI();
|
||||
String name = detail.getFirstChild().getLocalName();
|
||||
|
||||
WSDLOperation o = wbo.getOperation();
|
||||
|
||||
WSDLFault fault = o.getFault(new QName(ns, name));
|
||||
if (fault == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
action = fault.getAction();
|
||||
|
||||
return action;
|
||||
} catch (SOAPException e) {
|
||||
throw new WebServiceException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public String getInputAction(Packet packet) {
|
||||
String action = null;
|
||||
|
||||
if (wsdlPort != null) {
|
||||
WSDLOperationMapping wsdlOp = packet.getWSDLOperationMapping();
|
||||
if (wsdlOp != null) {
|
||||
WSDLBoundOperation wbo = wsdlOp.getWSDLBoundOperation();
|
||||
WSDLOperation op = wbo.getOperation();
|
||||
action = op.getInput().getAction();
|
||||
}
|
||||
}
|
||||
|
||||
return action;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method gives the Input addressing Action for a message.
|
||||
* It gives the Action set in the wsdl operation for the corresponding payload.
|
||||
* If it is not explicitly set, it gives the soapAction
|
||||
* @param packet
|
||||
* @return input Action
|
||||
*/
|
||||
public String getEffectiveInputAction(Packet packet) {
|
||||
//non-default SOAPAction beomes wsa:action
|
||||
if(packet.soapAction != null && !packet.soapAction.equals("")) {
|
||||
return packet.soapAction;
|
||||
}
|
||||
String action;
|
||||
|
||||
if (wsdlPort != null) {
|
||||
WSDLOperationMapping wsdlOp = packet.getWSDLOperationMapping();
|
||||
if (wsdlOp != null) {
|
||||
WSDLBoundOperation wbo = wsdlOp.getWSDLBoundOperation();
|
||||
WSDLOperation op = wbo.getOperation();
|
||||
action = op.getInput().getAction();
|
||||
} else {
|
||||
action = packet.soapAction;
|
||||
}
|
||||
} else {
|
||||
action = packet.soapAction;
|
||||
}
|
||||
return action;
|
||||
}
|
||||
|
||||
public boolean isInputActionDefault(Packet packet) {
|
||||
if (wsdlPort == null) {
|
||||
return false;
|
||||
}
|
||||
WSDLOperationMapping wsdlOp = packet.getWSDLOperationMapping();
|
||||
if(wsdlOp == null) {
|
||||
return false;
|
||||
}
|
||||
WSDLBoundOperation wbo = wsdlOp.getWSDLBoundOperation();
|
||||
WSDLOperation op = wbo.getOperation();
|
||||
return op.getInput().isDefaultAction();
|
||||
|
||||
}
|
||||
|
||||
public String getSOAPAction(Packet packet) {
|
||||
String action = "";
|
||||
|
||||
if (packet == null || packet.getMessage() == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
if (wsdlPort == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
WSDLOperationMapping wsdlOp = packet.getWSDLOperationMapping();
|
||||
if (wsdlOp == null) {
|
||||
return action;
|
||||
}
|
||||
|
||||
WSDLBoundOperation op = wsdlOp.getWSDLBoundOperation();
|
||||
action = op.getSOAPAction();
|
||||
return action;
|
||||
}
|
||||
|
||||
public String getOutputAction(Packet packet) {
|
||||
//String action = AddressingVersion.UNSET_OUTPUT_ACTION;
|
||||
String action = null;
|
||||
WSDLOperationMapping wsdlOp = packet.getWSDLOperationMapping();
|
||||
if (wsdlOp != null) {
|
||||
JavaMethod javaMethod = wsdlOp.getJavaMethod();
|
||||
if (javaMethod != null) {
|
||||
JavaMethodImpl jm = (JavaMethodImpl) javaMethod;
|
||||
if (jm != null && jm.getOutputAction() != null && !jm.getOutputAction().equals("")) {
|
||||
return jm.getOutputAction();
|
||||
}
|
||||
}
|
||||
WSDLBoundOperation wbo = wsdlOp.getWSDLBoundOperation();
|
||||
if (wbo != null) return getOutputAction(wbo);
|
||||
}
|
||||
return action;
|
||||
}
|
||||
|
||||
String getOutputAction(@Nullable WSDLBoundOperation wbo) {
|
||||
String action = AddressingVersion.UNSET_OUTPUT_ACTION;
|
||||
if (wbo != null) {
|
||||
WSDLOutput op = wbo.getOperation().getOutput();
|
||||
if (op != null) {
|
||||
action = op.getAction();
|
||||
}
|
||||
}
|
||||
return action;
|
||||
}
|
||||
|
||||
public SOAPFault createInvalidAddressingHeaderFault(InvalidAddressingHeaderException e, AddressingVersion av) {
|
||||
QName name = e.getProblemHeader();
|
||||
QName subsubcode = e.getSubsubcode();
|
||||
QName subcode = av.invalidMapTag;
|
||||
String faultstring = String.format(av.getInvalidMapText(), name, subsubcode);
|
||||
|
||||
try {
|
||||
SOAPFactory factory;
|
||||
SOAPFault fault;
|
||||
if (soapVer == SOAPVersion.SOAP_12) {
|
||||
factory = SOAPVersion.SOAP_12.getSOAPFactory();
|
||||
fault = factory.createFault();
|
||||
fault.setFaultCode(SOAPConstants.SOAP_SENDER_FAULT);
|
||||
fault.appendFaultSubcode(subcode);
|
||||
fault.appendFaultSubcode(subsubcode);
|
||||
getInvalidMapDetail(name, fault.addDetail());
|
||||
} else {
|
||||
factory = SOAPVersion.SOAP_11.getSOAPFactory();
|
||||
fault = factory.createFault();
|
||||
fault.setFaultCode(subsubcode);
|
||||
}
|
||||
|
||||
fault.setFaultString(faultstring);
|
||||
|
||||
return fault;
|
||||
} catch (SOAPException se) {
|
||||
throw new WebServiceException(se);
|
||||
}
|
||||
}
|
||||
|
||||
public SOAPFault newMapRequiredFault(MissingAddressingHeaderException e) {
|
||||
QName subcode = addVer.mapRequiredTag;
|
||||
QName subsubcode = addVer.mapRequiredTag;
|
||||
String faultstring = addVer.getMapRequiredText();
|
||||
|
||||
try {
|
||||
SOAPFactory factory;
|
||||
SOAPFault fault;
|
||||
if (soapVer == SOAPVersion.SOAP_12) {
|
||||
factory = SOAPVersion.SOAP_12.getSOAPFactory();
|
||||
fault = factory.createFault();
|
||||
fault.setFaultCode(SOAPConstants.SOAP_SENDER_FAULT);
|
||||
fault.appendFaultSubcode(subcode);
|
||||
fault.appendFaultSubcode(subsubcode);
|
||||
getMapRequiredDetail(e.getMissingHeaderQName(), fault.addDetail());
|
||||
} else {
|
||||
factory = SOAPVersion.SOAP_11.getSOAPFactory();
|
||||
fault = factory.createFault();
|
||||
fault.setFaultCode(subsubcode);
|
||||
}
|
||||
|
||||
fault.setFaultString(faultstring);
|
||||
|
||||
return fault;
|
||||
} catch (SOAPException se) {
|
||||
throw new WebServiceException(se);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract void getProblemActionDetail(String action, Element element);
|
||||
public abstract void getInvalidMapDetail(QName name, Element element);
|
||||
public abstract void getMapRequiredDetail(QName name, Element element);
|
||||
|
||||
protected SEIModel seiModel;
|
||||
protected WSDLPort wsdlPort;
|
||||
protected WSBinding binding;
|
||||
protected final SOAPVersion soapVer;
|
||||
protected final AddressingVersion addVer;
|
||||
}
|
||||
Reference in New Issue
Block a user