/**
* ExtensibilityQueryBindingImpl.java
*
*/
package test.wsdl.extensibility;
import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.message.MessageElement;
import org.apache.axis.message.Text;
import org.apache.commons.logging.Log;
import javax.xml.namespace.QName;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.rmi.RemoteException;
import java.util.Calendar;
public class ExtensibilityQueryBindingImpl implements ExtensibilityQueryPortType {
private final static String[] books = new String[] { "The Grid", "The Oxford Dictionary" };
private final static String[] subjects = new String[] { "Computer Science", "English" };
protected static Log log =
LogFactory.getLog(ExtensibilityQueryBindingImpl.class.getName());
public ExtensibilityType query(ExtensibilityType query) throws RemoteException {
ExtensibilityType result = new ExtensibilityType();
Object obj = null;
try {
obj = query.get_any()[0].getObjectValue(BookType.class);
} catch (Exception e) {
StringWriter writer = new StringWriter();
PrintWriter out = new PrintWriter(writer);
log.error("Error converting query: " + writer.toString());
throw new RemoteException(e.toString());
}
log.error("Incoming MessageContext " + obj + " : " + query.get_any()[0].toString());
if (obj instanceof BookType) {
BookType bookQuery = (BookType)obj;
String subject = bookQuery.getSubject();
if (!"all".equals(subject)) {
throw new RemoteException("ExtensibilityQueryBindingImpl: Book subject query should be all, instead was " + subject);
}
ResultListType resultList = new ResultListType();
QueryResultType[] queryResult = new QueryResultType[books.length];
for (int i = 0; i < books.length; i++) {
queryResult[i] = new QueryResultType();
queryResult[i].setName(subjects[i]);
queryResult[i].setStatus(StatusType.MORE);
queryResult[i].setValue(books[i]);
queryResult[i].setTime(Calendar.getInstance());
queryResult[i].setQueryType(new QName("urn:QueryType","BookQuery"));
}
resultList.setResult(queryResult);
QName elementName = QueryResultElement.getTypeDesc().getFields()[0].getXmlName();
MessageElement me = new MessageElement(elementName.getNamespaceURI(), elementName.getLocalPart(), resultList);
log.debug("Outgoing message: " + me.toString());
result.set_any(new MessageElement [] { me });
} else {
throw new RemoteException("Failed to get FindBooksQueryExpressionElement. Got: " + obj);
}
return result;
}
public ExtensibilityType mixedQuery(ExtensibilityType query)
throws RemoteException {
MessageElement [] elements = query.get_any();
if (elements == null) {
throw new RemoteException("No any");
}
if (elements.length != 3) {
throw new RemoteException("Expected: 3 got: " + elements.length +
" element");
}
String expected = "123 456";
String received = elements[0].toString();
if (!expected.equals(received)) {
throw new RemoteException("Expected: " + expected +
" received: " + received);
}
Object obj = null;
try {
obj = elements[1].getObjectValue(BookType.class);
} catch (Exception e) {
throw new RemoteException("Failed to deserialize", e);
}
BookType bookQuery = (BookType)obj;
String subject = bookQuery.getSubject();
if (!"all".equals(subject)) {
throw new RemoteException("ExtensibilityQueryBindingImpl: Book subject query should be all, instead was " + subject);
}
expected = "789";
received = elements[2].toString();
if (!expected.equals(received)) {
throw new RemoteException("Expected: " + expected +
" received: " + received);
}
ExtensibilityType reply = new ExtensibilityType();
MessageElement [] replyElements = new MessageElement[2];
BookType book = new BookType();
book.setSubject("gotAll");
QName elementName = FindBooksQueryExpressionElement.getTypeDesc().getFields()[0].getXmlName();
replyElements[0] = new MessageElement(elementName.getNamespaceURI(), elementName.getLocalPart(), book);
replyElements[1] = new MessageElement(new Text("ABCD"));
reply.set_any(replyElements);
return reply;
}
}
|