| Constructor: |
public CDROutputObject(ORB orb,
MessageMediator messageMediator,
Message header,
byte streamFormatVersion) {
this(
orb,
((CorbaMessageMediator)messageMediator).getGIOPVersion(),
header,
BufferManagerFactory.newBufferManagerWrite(
((CorbaMessageMediator)messageMediator).getGIOPVersion(),
header.getEncodingVersion(),
orb),
streamFormatVersion,
(CorbaMessageMediator)messageMediator);
}
|
public CDROutputObject(ORB orb,
MessageMediator messageMediator,
Message header,
byte streamFormatVersion,
int strategy) {
this(
orb,
((CorbaMessageMediator)messageMediator).getGIOPVersion(),
header,
BufferManagerFactory.
newBufferManagerWrite(strategy,
header.getEncodingVersion(),
orb),
streamFormatVersion,
(CorbaMessageMediator)messageMediator);
}
|
public CDROutputObject(ORB orb,
CorbaMessageMediator mediator,
GIOPVersion giopVersion,
CorbaConnection connection,
Message header,
byte streamFormatVersion) {
this(
orb,
giopVersion,
header,
BufferManagerFactory.
newBufferManagerWrite(giopVersion,
header.getEncodingVersion(),
orb),
streamFormatVersion,
mediator);
this.connection = connection ;
}
|
| Method from com.sun.corba.se.impl.encoding.CDROutputObject Detail: |
protected CodeSetConversion.CTBConverter createCharCTBConverter() {
CodeSetComponentInfo.CodeSetContext codesets = getCodeSets();
// If the connection doesn't have its negotiated
// code sets by now, fall back on the defaults defined
// in CDRInputStream.
if (codesets == null)
return super.createCharCTBConverter();
OSFCodeSetRegistry.Entry charSet
= OSFCodeSetRegistry.lookupEntry(codesets.getCharCodeSet());
if (charSet == null)
throw wrapper.unknownCodeset( charSet ) ;
return CodeSetConversion.impl().getCTBConverter(charSet,
isLittleEndian(),
false);
}
Override the default CDR factory behavior to get the
negotiated code sets from the connection.
These are only called once per message, the first time needed.
In the local case, there is no Connection, so use the
local code sets. |
protected CodeSetConversion.CTBConverter createWCharCTBConverter() {
CodeSetComponentInfo.CodeSetContext codesets = getCodeSets();
// If the connection doesn't have its negotiated
// code sets by now, we have to throw an exception.
// See CORBA formal 00-11-03 13.9.2.6.
if (codesets == null) {
if (getConnection().isServer())
throw omgWrapper.noClientWcharCodesetCtx() ;
else
throw omgWrapper.noServerWcharCodesetCmp() ;
}
OSFCodeSetRegistry.Entry wcharSet
= OSFCodeSetRegistry.lookupEntry(codesets.getWCharCodeSet());
if (wcharSet == null)
throw wrapper.unknownCodeset( wcharSet ) ;
boolean useByteOrderMarkers
= ((ORB)orb()).getORBData().useByteOrderMarkers();
// With UTF-16:
//
// For GIOP 1.2, we can put byte order markers if we want to, and
// use the default of big endian otherwise. (See issue 3405b)
//
// For GIOP 1.1, we don't use BOMs and use the endianness of
// the stream.
if (wcharSet == OSFCodeSetRegistry.UTF_16) {
if (getGIOPVersion().equals(GIOPVersion.V1_2)) {
return CodeSetConversion.impl().getCTBConverter(wcharSet,
false,
useByteOrderMarkers);
}
if (getGIOPVersion().equals(GIOPVersion.V1_1)) {
return CodeSetConversion.impl().getCTBConverter(wcharSet,
isLittleEndian(),
false);
}
}
// In the normal case, let the converter system handle it
return CodeSetConversion.impl().getCTBConverter(wcharSet,
isLittleEndian(),
useByteOrderMarkers);
}
|
public InputStream create_input_stream() {
// XREVISIT
return null;
//return new XIIOPInputStream(orb(), getByteBuffer(), getIndex(),
//isLittleEndian(), getMessageHeader(), conn);
}
overrides create_input_stream from CDROutputStream |
protected void dprint(String msg) {
ORBUtility.dprint("CDROutputObject", msg);
}
|
public final void finishSendingMessage() {
getBufferManager().sendMessage();
}
|
public final ByteBufferWithInfo getByteBufferWithInfo() {
return super.getByteBufferWithInfo();
}
|
public CorbaConnection getConnection() {
// REVISIT - only set when doing sendCancelRequest.
if (connection != null) {
return connection;
}
return (CorbaConnection) corbaMessageMediator.getConnection();
}
|
public Message getMessageHeader() {
return header;
}
|
public final void setByteBufferWithInfo(ByteBufferWithInfo bbwi) {
super.setByteBufferWithInfo(bbwi);
}
|
public void writeTo(CorbaConnection connection) throws IOException {
//
// Update the GIOP MessageHeader size field.
//
ByteBufferWithInfo bbwi = getByteBufferWithInfo();
getMessageHeader().setSize(bbwi.byteBuffer, bbwi.getSize());
if (orb() != null) {
if (((ORB)orb()).transportDebugFlag) {
dprint(".writeTo: " + connection);
}
if (((ORB)orb()).giopDebugFlag) {
CDROutputStream_1_0.printBuffer(bbwi);
}
}
bbwi.byteBuffer.position(0).limit(bbwi.getSize());
connection.write(bbwi.byteBuffer);
}
Write the contents of the CDROutputStream to the specified
output stream. Has the side-effect of pushing any current
Message onto the Message list. |