谁能说说axis2中RawXMLINOutMessageReceiver和 RPCMessageReceiver区别 RawXMLINOutMessageReceiver显示wsdl文件失败,说是aixs v1的bug,RPCMessageReceiver显示没问题,.net调用成功。其他的功能不清楚,应该是和OMElement有关系 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用 RawXMLINOutMessageReceiver的service的方法要么没有参数要么只能接受OMElement类型的参数 返回也是OMElement类型 。使用 RPCMessageReceiver的参数可以是任意的java type.返回可以使任意的java type 。RPCMessageReceiver 负责 OMEelment到 java type 或者java type到OMElement的转换。 RawXMLINOutMessageReceiver 的核心代码public void invokeBusinessLogic(MessageContext msgContext, MessageContext newmsgContext) throws AxisFault { try { // get the implementation class for the Web Service Object obj = getTheImplementationObject(msgContext); // find the WebService method Class ImplClass = obj.getClass(); // Inject the Message Context if it is asked for DependencyManager.configureBusinessLogicProvider(obj, msgContext.getOperationContext()); AxisOperation opDesc = msgContext.getOperationContext().getAxisOperation(); Method method = findOperation(opDesc, ImplClass); if (method != null) { Class[] parameters = method.getParameterTypes(); Object[] args; if ((parameters == null) || (parameters.length == 0)) { args = new Object[0]; } else if (parameters.length == 1) { OMElement omElement = msgContext.getEnvelope().getBody().getFirstElement(); args = new Object[]{omElement}; } else { throw new AxisFault(Messages.getMessage("rawXmlProivdeIsLimited")); } OMElement result; try { result = (OMElement) method.invoke(obj, args); } catch (Exception e) { throw new AxisFault(e.getMessage()); } AxisService service = msgContext.getAxisService(); service.getTargetNamespace(); result.declareNamespace(service.getTargetNamespace(), service.getTargetNamespacePrefix()); OMElement bodyContent; SOAPFactory fac = getSOAPFactory(msgContext); bodyContent = result; SOAPEnvelope envelope = fac.getDefaultEnvelope(); if (bodyContent != null) { envelope.getBody().addChild(bodyContent); } newmsgContext.setEnvelope(envelope); } else { throw new AxisFault(Messages.getMessage("methodNotImplemented", opDesc.getName().toString())); } } catch (Exception e) { throw AxisFault.makeFault(e); } } RPCMessageReceiver 的核心代码public void invokeBusinessLogic(MessageContext inMessage, MessageContext outMessage) throws AxisFault { try { // get the implementation class for the Web Service Object obj = getTheImplementationObject(inMessage); Class ImplClass = obj.getClass(); DependencyManager.configureBusinessLogicProvider(obj, inMessage.getOperationContext()); AxisOperation op = inMessage.getOperationContext().getAxisOperation(); AxisService service = inMessage.getAxisService(); OMElement methodElement = inMessage.getEnvelope().getBody() .getFirstElement(); AxisMessage inaxisMessage = op.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); String messageNameSpace = null; if (inaxisMessage != null) { messageNameSpace = inaxisMessage.getElementQName().getNamespaceURI(); } OMNamespace namespace = methodElement.getNamespace(); if (namespace == null || !messageNameSpace.equals(namespace.getName())) { throw new AxisFault("namespace mismatch require " + messageNameSpace + " found " + methodElement.getNamespace().getName()); } String methodName = op.getName().getLocalPart(); Method[] methods = ImplClass.getMethods(); for (int i = 0; i < methods.length; i++) { if (methods[i].getName().equals(methodName)) { this.method = methods[i]; break; } } Object[] objectArray = RPCUtil.processRequest(methodElement, method); Object resObject; try { resObject = method.invoke(obj, objectArray); } catch (Exception e) { throw new AxisFault.makeFault(e); } SOAPFactory fac = getSOAPFactory(inMessage); // Handling the response AxisMessage outaxisMessage = op.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE); if (inaxisMessage != null) { messageNameSpace = outaxisMessage.getElementQName().getNamespaceURI(); } OMNamespace ns = fac.createOMNamespace(messageNameSpace, service.getSchematargetNamespacePrefix()); SOAPEnvelope envelope = fac.getDefaultEnvelope(); OMElement bodyContent = null; if (resObject instanceof Object[]) { QName resName = new QName(service.getSchematargetNamespace(), method.getName() + "Response", service.getSchematargetNamespacePrefix()); OMElement bodyChild = RPCUtil.getResponseElement(resName, (Object[]) resObject); envelope.getBody().addChild(bodyChild); } else { RPCUtil.processResponse(fac, resObject, bodyContent, ns, envelope, method); } outMessage.setEnvelope(envelope); } catch (Exception e) { throw AxisFault.makeFault(e); } } RPCMessageReceiver类可处理输入输出。 hibernate更新主表只删除子表记录如何实现? jsp页面播放外部视频? 求完整代码,, 我们爱分享--离线数据集 hibernate DaoFactory测试问题 一个mysql数据插入问题,哪位大婶帮忙看看 Struts + Spring + Hibernate框架开发问题求救……5555 大家好!工作4年,在职java程序员,希望和大家交流!里面有我的MSN,顶者有分! JDBC的驱动下了怎么放在CLASSPATH里? 一个jdbc的问题 怎么设计电脑五子棋两机对弈程序? 我的weblogic7部署CMP出错,到底是出了什么问题,久久我啊 请教struts下的分页代码??
使用 RPCMessageReceiver的参数可以是任意的java type.返回可以使任意的java type 。RPCMessageReceiver 负责 OMEelment到 java type 或者java type到OMElement的转换。
public void invokeBusinessLogic(MessageContext msgContext, MessageContext newmsgContext)
throws AxisFault {
try { // get the implementation class for the Web Service
Object obj = getTheImplementationObject(msgContext); // find the WebService method
Class ImplClass = obj.getClass(); // Inject the Message Context if it is asked for
DependencyManager.configureBusinessLogicProvider(obj,
msgContext.getOperationContext()); AxisOperation opDesc = msgContext.getOperationContext().getAxisOperation();
Method method = findOperation(opDesc, ImplClass); if (method != null) {
Class[] parameters = method.getParameterTypes();
Object[] args; if ((parameters == null) || (parameters.length == 0)) {
args = new Object[0];
} else if (parameters.length == 1) {
OMElement omElement = msgContext.getEnvelope().getBody().getFirstElement();
args = new Object[]{omElement};
} else {
throw new AxisFault(Messages.getMessage("rawXmlProivdeIsLimited"));
} OMElement result;
try {
result = (OMElement) method.invoke(obj, args);
} catch (Exception e) {
throw new AxisFault(e.getMessage());
} AxisService service = msgContext.getAxisService();
service.getTargetNamespace();
result.declareNamespace(service.getTargetNamespace(),
service.getTargetNamespacePrefix());
OMElement bodyContent; SOAPFactory fac = getSOAPFactory(msgContext);
bodyContent = result; SOAPEnvelope envelope = fac.getDefaultEnvelope(); if (bodyContent != null) {
envelope.getBody().addChild(bodyContent);
} newmsgContext.setEnvelope(envelope);
} else {
throw new AxisFault(Messages.getMessage("methodNotImplemented",
opDesc.getName().toString()));
}
} catch (Exception e) {
throw AxisFault.makeFault(e);
}
}
public void invokeBusinessLogic(MessageContext inMessage, MessageContext outMessage) throws AxisFault {
try {
// get the implementation class for the Web Service
Object obj = getTheImplementationObject(inMessage); Class ImplClass = obj.getClass();
DependencyManager.configureBusinessLogicProvider(obj,
inMessage.getOperationContext()); AxisOperation op = inMessage.getOperationContext().getAxisOperation();
AxisService service = inMessage.getAxisService();
OMElement methodElement = inMessage.getEnvelope().getBody()
.getFirstElement();
AxisMessage inaxisMessage = op.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
String messageNameSpace = null;
if (inaxisMessage != null) {
messageNameSpace = inaxisMessage.getElementQName().getNamespaceURI();
} OMNamespace namespace = methodElement.getNamespace();
if (namespace == null || !messageNameSpace.equals(namespace.getName())) {
throw new AxisFault("namespace mismatch require " +
messageNameSpace +
" found " + methodElement.getNamespace().getName());
}
String methodName = op.getName().getLocalPart();
Method[] methods = ImplClass.getMethods();
for (int i = 0; i < methods.length; i++) {
if (methods[i].getName().equals(methodName)) {
this.method = methods[i];
break;
}
}
Object[] objectArray = RPCUtil.processRequest(methodElement, method);
Object resObject;
try {
resObject = method.invoke(obj, objectArray);
} catch (Exception e) {
throw new AxisFault.makeFault(e);
}
SOAPFactory fac = getSOAPFactory(inMessage); // Handling the response
AxisMessage outaxisMessage = op.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
if (inaxisMessage != null) {
messageNameSpace = outaxisMessage.getElementQName().getNamespaceURI();
} OMNamespace ns = fac.createOMNamespace(messageNameSpace,
service.getSchematargetNamespacePrefix());
SOAPEnvelope envelope = fac.getDefaultEnvelope();
OMElement bodyContent = null; if (resObject instanceof Object[]) {
QName resName = new QName(service.getSchematargetNamespace(),
method.getName() + "Response",
service.getSchematargetNamespacePrefix());
OMElement bodyChild = RPCUtil.getResponseElement(resName, (Object[]) resObject);
envelope.getBody().addChild(bodyChild);
} else {
RPCUtil.processResponse(fac, resObject, bodyContent, ns, envelope, method);
} outMessage.setEnvelope(envelope); } catch (Exception e) {
throw AxisFault.makeFault(e);
}
}