top
Loading...
J2EEWeb服務客戶端質量報告(四)
天極IT資訊短信服務 電腦小技巧
資費:包月5元
手機:
介紹:細處著手,巧處用功。高手和菜鳥之間的差別就是:高手什么都知道,菜鳥知道一些。電腦小技巧收集最新奇招高招,讓你輕松踏上高手之路。

客戶端服務軟件包

通過指引WSDL編譯器到應用服務器提供的WSDL上可自動生成客戶端服務軟件包。這個軟件包包含許多類。我們需要修改的唯一類就是客戶端Stub類。同樣地,服務器Web 服務軟件包也包含類Tie,它可將Web服務請求綁定到EJB方法上,客戶端Stub類為每個服務商業方法的每個客戶端配備一個方法。



服務Stub類的名稱為 <ServiceName>ServantInterface_Stub,其中<ServiceName>就是服務名。我們看看類XactServiceServantInterface_Stub 內的submitWork()方法:

/*
* Implementation of submitWork
*/
public java.lang.String submitWork(java.lang.String string_1)
throws java.rmi.RemoteException {

try {
StreamingSenderState _state = _start(_handlerChain);
InternalSOAPMessage _request = _state.getRequest();
_request.setOperationCode(SubmitWork_OPCODE);
Xact.XactServiceServantInterface_SubmitWork_RequestStruct
_myXactServiceServantInterface_SubmitWork_RequestStruct =new Xact.XactServiceServantInterface_SubmitWork_RequestStruct();
_myXactServiceServantInterface_SubmitWork_RequestStruct.setString_1(string_1);

SOAPBlockInfo _bodyBlock = new SOAPBlockInfo(ns1_SubmitWork_SubmitWork_QNAME);
_bodyBlock.setValue(_myXactServiceServantInterface_SubmitWork_RequestStruct);
_bodyBlock.setSerializer(myXactServiceServantInterface_SubmitWork_RequestStruct_SOAPSerializer);
_request.setBody(_bodyBlock);

_state.getMessageContext().setProperty(HttpClientTransport.HTTP_SOAPACTION_PROPERTY, "");

Serializer.attachPendingReportToMessage(_state.getMessageContext());
_send((String) _getProperty(ENDPOINT_ADDRESS_PROPERTY), _state);

Xact.XactServiceServantInterface_SubmitWork_ResponseStruct
_myXactServiceServantInterface_SubmitWork_ResponseStruct = null;
Object _responseObj = _state.getResponse().getBody().getValue();
if (_responseObj instanceof SOAPDeserializationState) {
_myXactServiceServantInterface_SubmitWork_ResponseStruct =
(Xact.XactServiceServantInterface_SubmitWork_ResponseStruct)
((SOAPDeserializationState)_responseObj).getInstance();
} else {
_myXactServiceServantInterface_SubmitWork_ResponseStruct =(Xact.XactServiceServantInterface_SubmitWork_ResponseStruct)responseObj;
}

return _myXactServiceServantInterface_SubmitWork_ResponseStruct
.getResult();
} catch (RemoteException e) {
// Let this one through unchanged
throw e;
} catch (JAXRPCException e) {
throw new RemoteException(e.getMessage(), e);
} catch (Exception e) {
if (e instanceof RuntimeException) {
throw (RuntimeException)e;
} else {
throw new RemoteException(e.getMessage(), e);
}
}
}

在上述的代碼中,我們在_send()之前立即添加了下面的單行:

Serializer.attachPendingReportToMessage(_state.getMessageContext());

如果沒有待解決的客戶端報告需要發送,attachPendingReportToMessage 就返回。否則,它將當前報告連在XML之后并將它當作文本附件添加到SOAP信息中。我們對其他的商業方法也作了同樣的修改,在它們的每個_send()調用之前立即添加了上面的代碼行。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗