BindingOperationInfo bop = exchange.get(BindingOperationInfo.class);
ServiceInfo si = ep.getEndpointInfo().getService();
// XXX - Should the BindingMessageInfo.class be put on
// the message?
//MessageInfo msgInfo = message.get(MessageInfo.class);
BindingMessageInfo msgInfo = null;
boolean client = isRequestor(message);
Collection<OperationInfo> ops = null;
if (bop == null) {
ops = new ArrayList<OperationInfo>();
ops.addAll(si.getInterface().getOperations());
if (xmlReader.getEventType() == XMLStreamReader.END_ELEMENT && !client) {
//empty input
//TO DO : check duplicate operation with no input
for (OperationInfo op : ops) {
MessageInfo bmsg = op.getInput();
if (bmsg.getMessageParts().size() == 0) {
BindingOperationInfo boi = ep.getEndpointInfo().getBinding().getOperation(op);
exchange.put(BindingOperationInfo.class, boi);
exchange.put(OperationInfo.class, op);
exchange.setOneWay(op.isOneWay());
}
}
}
} else if (msgInfo == null) {
// XXX - Is the call to
// AbstractInDatabindingInterceptor.getMessageInfo()
// necessary? Should we put the BindingMessageInfo on
// the message instead of the MessageInfo?
// msgInfo = getMessageInfo(message, bop, exchange);
getMessageInfo(message, bop);
if (client) {
msgInfo = bop.getOutput();
} else {
msgInfo = bop.getInput();
}
}
int paramNum = 0;
while (StaxUtils.toNextElement(xmlReader)) {
QName elName = xmlReader.getName();
Object o = null;
MessagePartInfo p;
if (msgInfo != null && msgInfo.getMessageParts() != null) {
assert msgInfo.getMessageParts().size() > paramNum;
p = msgInfo.getMessageParts().get(paramNum);
} else {
p = findMessagePart(exchange, ops, elName, client, paramNum);
}
if (p == null) {