use of com.sun.xml.ws.api.model.wsdl.editable.EditableWSDLBoundOperation in project metro-jax-ws by eclipse-ee4j.
the class RuntimeWSDLParser method parseBindingOperation.
private void parseBindingOperation(XMLStreamReader reader, EditableWSDLBoundPortType binding) {
String bindingOpName = ParserUtil.getMandatoryNonEmptyAttribute(reader, "name");
if (bindingOpName == null) {
// TODO: throw exception?
// skip wsdl:binding element for now
XMLStreamReaderUtil.skipElement(reader);
return;
}
QName opName = new QName(binding.getPortTypeName().getNamespaceURI(), bindingOpName);
EditableWSDLBoundOperation bindingOp = new WSDLBoundOperationImpl(reader, binding, opName);
binding.put(opName, bindingOp);
extensionFacade.bindingOperationAttributes(bindingOp, reader);
while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
QName name = reader.getName();
String style = null;
if (WSDLConstants.QNAME_INPUT.equals(name)) {
parseInputBinding(reader, bindingOp);
} else if (WSDLConstants.QNAME_OUTPUT.equals(name)) {
parseOutputBinding(reader, bindingOp);
} else if (WSDLConstants.QNAME_FAULT.equals(name)) {
parseFaultBinding(reader, bindingOp);
} else if (SOAPConstants.QNAME_OPERATION.equals(name) || SOAPConstants.QNAME_SOAP12OPERATION.equals(name)) {
style = reader.getAttributeValue(null, "style");
String soapAction = reader.getAttributeValue(null, "soapAction");
if (soapAction != null)
bindingOp.setSoapAction(soapAction);
goToEnd(reader);
} else {
extensionFacade.bindingOperationElements(bindingOp, reader);
}
/*
If style attribute is present set it otherwise set the style as defined
on the <soap:binding> element
*/
if (style != null) {
if (style.equals("rpc"))
bindingOp.setStyle(Style.RPC);
else
bindingOp.setStyle(Style.DOCUMENT);
} else {
bindingOp.setStyle(binding.getStyle());
}
}
}
use of com.sun.xml.ws.api.model.wsdl.editable.EditableWSDLBoundOperation in project metro-jax-ws by eclipse-ee4j.
the class WSDLBoundPortTypeImpl method freezePayloadMap.
private void freezePayloadMap() {
if (style == Style.RPC) {
payloadMap = new QNameMap<>();
for (EditableWSDLBoundOperation op : bindingOperations.values()) {
payloadMap.put(op.getRequestPayloadName(), op);
}
} else {
payloadMap = new QNameMap<>();
// For doclit The tag will be the operation that has the same input part descriptor value
for (EditableWSDLBoundOperation op : bindingOperations.values()) {
QName name = op.getRequestPayloadName();
if (name == null) {
// empty payload
emptyPayloadOperation = op;
continue;
}
payloadMap.put(name, op);
}
}
}
use of com.sun.xml.ws.api.model.wsdl.editable.EditableWSDLBoundOperation in project metro-jax-ws by eclipse-ee4j.
the class WSDLModelImpl method finalizeRpcLitBinding.
public void finalizeRpcLitBinding(EditableWSDLBoundPortType boundPortType) {
assert (boundPortType != null);
QName portTypeName = boundPortType.getPortTypeName();
if (portTypeName == null)
return;
WSDLPortType pt = portTypes.get(portTypeName);
if (pt == null)
return;
for (EditableWSDLBoundOperation bop : boundPortType.getBindingOperations()) {
WSDLOperation pto = pt.get(bop.getName().getLocalPart());
WSDLMessage inMsgName = pto.getInput().getMessage();
if (inMsgName == null)
continue;
EditableWSDLMessage inMsg = messages.get(inMsgName.getName());
int bodyindex = 0;
if (inMsg != null) {
for (EditableWSDLPart part : inMsg.parts()) {
String name = part.getName();
ParameterBinding pb = bop.getInputBinding(name);
if (pb.isBody()) {
part.setIndex(bodyindex++);
part.setBinding(pb);
bop.addPart(part, Mode.IN);
}
}
}
bodyindex = 0;
if (pto.isOneWay())
continue;
WSDLMessage outMsgName = pto.getOutput().getMessage();
if (outMsgName == null)
continue;
EditableWSDLMessage outMsg = messages.get(outMsgName.getName());
if (outMsg != null) {
for (EditableWSDLPart part : outMsg.parts()) {
String name = part.getName();
ParameterBinding pb = bop.getOutputBinding(name);
if (pb.isBody()) {
part.setIndex(bodyindex++);
part.setBinding(pb);
bop.addPart(part, Mode.OUT);
}
}
}
}
}
use of com.sun.xml.ws.api.model.wsdl.editable.EditableWSDLBoundOperation in project metro-jax-ws by eclipse-ee4j.
the class WSDLBoundPortTypeImpl method freeze.
public void freeze() {
portType = owner.getPortType(portTypeName);
if (portType == null) {
throw new LocatableWebServiceException(ClientMessages.UNDEFINED_PORT_TYPE(portTypeName), getLocation());
}
portType.freeze();
for (EditableWSDLBoundOperation op : bindingOperations.values()) {
op.freeze(owner);
}
freezePayloadMap();
owner.finalizeRpcLitBinding(this);
}
Aggregations