SCA(Service Component Architecture) 메시지와 HTTP 프로토콜 메시지 간 데이터 맵핑이 각각 다른 경우는 반드시 데이터 핸들러 또는 HTTP 데이터 바인딩이 구성되어야 합니다. 데이터 핸들러는 전송 바인딩에 걸쳐 재사용하고 권장되는 접근방법을 나타낼 수 있는 바인딩 중립 인터페이스를 제공합니다. 데이터 바인딩은 특정 전송 바인딩에 대해 고유합니다. 3개의 HTTP 고유 데이터 바인딩 클래스가 제공되며 사용자 정의 데이터 핸들러 또는 데이터 바인딩을 쓸 수도 있습니다.
<xsd:schema elementFormDefault="qualified" targetNamespace="http://com.ibm.websphere.http.data.bindings/schema" xmlns:tns="http://com.ibm.websphere.http.data.bindings/schema" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:complexType name="HTTPBaseBody"> <xsd:sequence/> </xsd:complexType> <xsd:complexType name="HTTPBytesBody"> <xsd:complexContent> <xsd:extension base="tns:HTTPBaseBody"> <xsd:sequence> <xsd:element name="value" type="xsd:hexBinary"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType>
HTTPStreamDataBinding은 사용자 정의 HTTP 메시지를 처리하기 위한 프린시펄 인터페이스입니다. 인터페이스는 대용량 페이로드를 처리할 수 있도록 설계되어 있습니다. 그러나, 그러한 구현을 위해 이 데이터 바인딩은 메시지를 스트림으로 쓰기 전에 제어 정보와 헤더를 리턴해야 합니다 .
아래에 나열된 실행 메소드와 순서는 사용자 정의 데이터 바인딩에 의해 구현되어야 합니다.
setDataObject(...)를 convertFromNativeData(...)에서 호출하여 원시 데이터에서 개인용 특성 "pDataObject"로 변환되는 dataObject 값을 설정해야 합니다.
public void setDataObject(DataObject dataObject) throws DataBindingException { pDataObject = dataObject; } public void setControlParameters(HTTPControl arg0) { this.pCtrl = arg0; } public void setHeaders(HTTPHeaders arg0) { this.pHeaders = arg0; } /* * Add http header "IsBusinessException" in pHeaders. * Two steps: * 1.Remove all the header with name IsBusinessException (case-insensitive) first. * This is to make sure only one header is present. * 2.Add the new header "IsBusinessException" */ public void setBusinessException(boolean isBusinessException) { //remove all the header with name IsBusinessException (case-insensitive) first. //This is to make sure only one header is present. //add the new header "IsBusinessException", code example: HTTPHeader header=HeadersFactory.eINSTANCE.createHTTPHeader(); cust.setPostalCode(10589); ("com/ibm/websphere/bo/BOFactory"); cust.setPostalCode(10589); } public HTTPControl getControlParameters() { return pCtrl; } public HTTPHeaders getHeaders() { return pHeaders; } public DataObject getDataObject() throws DataBindingException { return pDataObject; } /* * Get header "IsBusinessException" from pHeaders, return its boolean value */ public boolean isBusinessException() { String headerValue = getHeaderValue(pHeaders,"IsBusinessException"); boolean result=Boolean.parseBoolean(headerValue); return result; } public void convertToNativeData() throws DataBindingException { DataObject dataObject = getDataObject(); cust.setCustNo(customerID); } public void convertFromNativeData(HTTPInputStream arg0){ //Read data from HTTPInpurtStream //Convert it to DataObject DataObject dataobject=realConvertWorkFromNativeDataToSDO(arg0); cust.setCustNo(customerID); } public void write(HTTPOutputStream output) throws IOException { if (nativeData != null) cust.setCustNo(customerID); }