You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2018/09/20 10:20:48 UTC
[directory-ldap-api] branch master updated: Many fixes for the
Transaction extended operations
This is an automated email from the ASF dual-hosted git repository.
elecharny pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/directory-ldap-api.git
The following commit(s) were added to refs/heads/master by this push:
new 03d2e22 Many fixes for the Transaction extended operations
03d2e22 is described below
commit 03d2e22b032bcdfa622fc4d6144cdae631f89144
Author: Emmanuel Lécharny <el...@symas.com>
AuthorDate: Thu Sep 20 12:20:45 2018 +0200
Many fixes for the Transaction extended operations
---
.../java/org/apache/directory/api/i18n/I18n.java | 1 +
.../apache/directory/api/i18n/errors.properties | 3 +-
.../codec/decorators/ExtendedRequestDecorator.java | 17 ++++---
.../endTransaction/EndTransactionResponseImpl.java | 8 +--
.../startTransaction/StartTransactionRequest.java | 9 ++--
.../StartTransactionRequestImpl.java | 17 +++++--
.../startTransaction/StartTransactionResponse.java | 7 +--
.../StartTransactionResponseImpl.java | 31 ++++++++++--
.../endTransaction/EndTransactionFactory.java | 38 ++++++++++----
.../EndTransactionRequestDecorator.java | 23 +++++++++
.../EndTransactionResponseDecorator.java | 10 ++++
.../startTransaction/StartTransactionFactory.java | 24 ++++++++-
.../StartTransactionResponseDecorator.java | 59 +---------------------
.../api/ldap/model/message/ExtendedResponse.java | 8 +++
.../ldap/model/message/ExtendedResponseImpl.java | 3 ++
15 files changed, 158 insertions(+), 100 deletions(-)
diff --git a/i18n/src/main/java/org/apache/directory/api/i18n/I18n.java b/i18n/src/main/java/org/apache/directory/api/i18n/I18n.java
index dba64c2..8dd8a3e 100644
--- a/i18n/src/main/java/org/apache/directory/api/i18n/I18n.java
+++ b/i18n/src/main/java/org/apache/directory/api/i18n/I18n.java
@@ -365,6 +365,7 @@ public enum I18n
ERR_08229_UNEXPECTED_SYNC_INFO( "ERR_08229_UNEXPECTED_SYNC_INFO" ),
ERR_08230_WHOAMI_PAYLOAD_ENCODING_FAILED( "ERR_08230_WHOAMI_PAYLOAD_ENCODING_FAILED" ),
ERR_08231_START_TRANSACTION_PAYLOAD_ENCODING_FAILED( "ERR_08231_START_TRANSACTION_PAYLOAD_ENCODING_FAILED" ),
+ ERR_08232_END_TRANSACTION_PAYLOAD_ENCODING_FAILED( "ERR_08232_END_TRANSACTION_PAYLOAD_ENCODING_FAILED" ),
// intermediate 8300-8399
ERR_08300_REFRESH_DONE_DECODING_FAILED( "ERR_08300_REFRESH_DONE_DECODING_FAILED" ),
diff --git a/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties b/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties
index 0b72ea4..0aab4ff 100644
--- a/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties
+++ b/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties
@@ -356,7 +356,8 @@ ERR_08227_AUTHZID_MUST_START_WITH_U_OR_DN=authzId Must starts with either u: or
ERR_08228_DECORATED_SP_NULL=decorated stored procedure request is null
ERR_08229_UNEXPECTED_SYNC_INFO=Unexpected SynchronizationInfo: {0}
ERR_08230_WHOAMI_PAYLOAD_ENCODING_FAILED=Failed to encode payload WhoAmIRequest
-ERR_08231_START_TRANSACTION_PAYLOAD_ENCODING_FAILED=Failed to encode payload StartTransactionRequest
+ERR_08231_START_TRANSACTION_PAYLOAD_ENCODING_FAILED=Failed to encode payload for StartTransactionRequest
+ERR_08232_END_TRANSACTION_PAYLOAD_ENCODING_FAILED=Failed to encode payload for EndTransactionRequest
# api-ldap-extras-codec intermediate 8300-8399
ERR_08300_REFRESH_DONE_DECODING_FAILED=failed to decode the refreshDone flag for SyncInfoValueControl
diff --git a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/decorators/ExtendedRequestDecorator.java b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/decorators/ExtendedRequestDecorator.java
index e02bc28..2c76968 100644
--- a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/decorators/ExtendedRequestDecorator.java
+++ b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/decorators/ExtendedRequestDecorator.java
@@ -181,11 +181,12 @@ public ExtendedRequest addControl( Control control )
requestNameBytes = Strings.getBytesUtf8( getRequestName() );
extendedRequestLength = 1 + TLV.getNbBytes( requestNameBytes.length ) + requestNameBytes.length;
+ requestValue = getRequestValue();
- if ( getRequestValue() != null )
+ if ( requestValue != null )
{
- extendedRequestLength += 1 + TLV.getNbBytes( getRequestValue().length )
- + getRequestValue().length;
+ extendedRequestLength += 1 + TLV.getNbBytes( requestValue.length )
+ + requestValue.length;
}
return 1 + TLV.getNbBytes( extendedRequestLength ) + extendedRequestLength;
@@ -227,15 +228,17 @@ public ExtendedRequest addControl( Control control )
}
// The requestValue, if any
- if ( getRequestValue() != null )
+ requestValue = getRequestValue();
+
+ if ( requestValue != null )
{
buffer.put( ( byte ) LdapCodecConstants.EXTENDED_REQUEST_VALUE_TAG );
- buffer.put( TLV.getBytes( getRequestValue().length ) );
+ buffer.put( TLV.getBytes( requestValue.length ) );
- if ( getRequestValue().length != 0 )
+ if ( requestValue.length != 0 )
{
- buffer.put( getRequestValue() );
+ buffer.put( requestValue );
}
}
}
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/endTransaction/EndTransactionResponseImpl.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/endTransaction/EndTransactionResponseImpl.java
index 306436c..b037b2f 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/endTransaction/EndTransactionResponseImpl.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/endTransaction/EndTransactionResponseImpl.java
@@ -89,11 +89,11 @@ public class EndTransactionResponseImpl extends ExtendedResponseImpl implements
/**
* Create a new EndTransactionResponseImpl instance
*
- * @param failedMessageId The request's messageId
+ * @param messageId The request's messageId
*/
- public EndTransactionResponseImpl( int failedMessageId )
+ public EndTransactionResponseImpl( int messageId )
{
- super( failedMessageId );
+ super( messageId );
super.getLdapResult().setMatchedDn( null );
super.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
}
@@ -106,7 +106,7 @@ public class EndTransactionResponseImpl extends ExtendedResponseImpl implements
{
super( EndTransactionRequest.EXTENSION_OID );
super.getLdapResult().setMatchedDn( null );
- super.getLdapResult().setResultCode( ResultCodeEnum.UNWILLING_TO_PERFORM );
+ super.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
}
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionRequest.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionRequest.java
index bda2dbe..b506545 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionRequest.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionRequest.java
@@ -27,12 +27,11 @@ import org.apache.directory.api.ldap.model.message.ExtendedRequest;
* The StartTransactionRequest interface. This is for the RFC 5805 Start Transaction Request,
* which grammar is :
* <pre>
- * ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
- * requestName [0] LDAPOID,
- * requestValue [1] OCTET STRING OPTIONAL }
+ * StartTransactionRequest ::= [APPLICATION 23] SEQUENCE {
+ * requestName [0] LDAPOID
+ * }
* </pre>
- *
- * where 'requestName' is 1.3.6.1.1.21.1 and requestValue is absent.
+ * where 'requestName' is 1.3.6.1.1.21.1.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionRequestImpl.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionRequestImpl.java
index 1b2038c..500fe0b 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionRequestImpl.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionRequestImpl.java
@@ -27,11 +27,10 @@ import org.apache.directory.api.ldap.model.message.AbstractExtendedRequest;
* Implement the extended Start Transaction Request as described in RFC 5805.
*
* It's grammar is :
- *
* <pre>
- * ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
- * requestName [0] LDAPOID,
- * requestValue [1] OCTET STRING OPTIONAL }
+ * StartTransactionRequest ::= [APPLICATION 23] SEQUENCE {
+ * requestName [0] LDAPOID
+ * }
* </pre>
*
* where 'requestName' is 1.3.6.1.1.21.1 and requestValue is absent.
@@ -74,4 +73,14 @@ public class StartTransactionRequestImpl extends AbstractExtendedRequest impleme
return ( StartTransactionResponse ) getResponse();
}
+
+
+ /**
+ * @see Object#toString()
+ */
+ @Override
+ public String toString()
+ {
+ return "StartTransactionRequest";
+ }
}
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionResponse.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionResponse.java
index 0c9fdbe..b4d1623 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionResponse.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionResponse.java
@@ -27,9 +27,8 @@ import org.apache.directory.api.ldap.model.message.ExtendedResponse;
* The interface for Start Transaction Extended Response. It's described in RFC 5805 :
*
* <pre>
- * ExtendedResponse ::= [APPLICATION 24] SEQUENCE {
+ * StartTransactionResponse ::= [APPLICATION 24] SEQUENCE {
* COMPONENTS OF LDAPResult,
- * responseName [10] LDAPOID OPTIONAL,
* responseValue [11] OCTET STRING OPTIONAL }
* </pre>
*
@@ -40,10 +39,6 @@ import org.apache.directory.api.ldap.model.message.ExtendedResponse;
*/
public interface StartTransactionResponse extends ExtendedResponse
{
- /** The OID for the Start Transaction extended operation response. */
- String EXTENSION_OID = StartTransactionRequest.EXTENSION_OID;
-
-
/**
* @return The transaction ID if success
*/
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionResponseImpl.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionResponseImpl.java
index 8e9f8bb..f0d36a9 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionResponseImpl.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionResponseImpl.java
@@ -32,9 +32,8 @@ import org.apache.directory.api.util.Strings;
* The interface for Start Transaction Extended Response. It's described in RFC 5805 :
*
* <pre>
- * ExtendedResponse ::= [APPLICATION 24] SEQUENCE {
+ * StartTransactionResponse ::= [APPLICATION 24] SEQUENCE {
* COMPONENTS OF LDAPResult,
- * responseName [10] LDAPOID OPTIONAL,
* responseValue [11] OCTET STRING OPTIONAL }
* </pre>
*
@@ -58,7 +57,7 @@ public class StartTransactionResponseImpl extends ExtendedResponseImpl implement
*/
public StartTransactionResponseImpl( int messageId, ResultCodeEnum resultCode, byte[] transactionId )
{
- super( messageId, EXTENSION_OID );
+ super( messageId );
switch ( resultCode )
{
@@ -89,7 +88,7 @@ public class StartTransactionResponseImpl extends ExtendedResponseImpl implement
*/
public StartTransactionResponseImpl( int messageId, byte[] transactionId )
{
- super( messageId, EXTENSION_OID );
+ super( messageId );
super.getLdapResult().setMatchedDn( null );
super.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
this.transactionId = Strings.copy( transactionId );
@@ -180,4 +179,28 @@ public class StartTransactionResponseImpl extends ExtendedResponseImpl implement
{
this.transactionId = Strings.copy( transactionId );
}
+
+
+ /**
+ * @see Object#toString()
+ */
+ @Override
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( "StartTransactionResponse :" );
+ sb.append( "\n transactionID : " );
+
+ if ( transactionId != null )
+ {
+ sb.append( Strings.dumpBytes( transactionId ) );
+ }
+ else
+ {
+ sb.append( "null" );
+ }
+
+ return sb.toString();
+ }
}
diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionFactory.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionFactory.java
index 08367eb..c0ae255 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionFactory.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionFactory.java
@@ -23,7 +23,7 @@ package org.apache.directory.api.ldap.extras.extended.ads_impl.endTransaction;
import org.apache.directory.api.asn1.DecoderException;
import org.apache.directory.api.ldap.codec.api.ExtendedOperationFactory;
import org.apache.directory.api.ldap.codec.api.LdapApiService;
-import org.apache.directory.api.ldap.extras.extended.cancel.CancelRequest;
+import org.apache.directory.api.ldap.codec.decorators.ExtendedResponseDecorator;
import org.apache.directory.api.ldap.extras.extended.endTransaction.EndTransactionRequest;
import org.apache.directory.api.ldap.extras.extended.endTransaction.EndTransactionRequestImpl;
import org.apache.directory.api.ldap.extras.extended.endTransaction.EndTransactionResponse;
@@ -60,7 +60,7 @@ public class EndTransactionFactory implements ExtendedOperationFactory
@Override
public String getOid()
{
- return CancelRequest.EXTENSION_OID;
+ return EndTransactionRequest.EXTENSION_OID;
}
@@ -70,7 +70,8 @@ public class EndTransactionFactory implements ExtendedOperationFactory
@Override
public EndTransactionResponse newResponse( byte[] encodedValue ) throws DecoderException
{
- EndTransactionResponseDecorator response = new EndTransactionResponseDecorator( codec, new EndTransactionResponseImpl() );
+ EndTransactionResponseDecorator response = new EndTransactionResponseDecorator( codec,
+ new EndTransactionResponseImpl() );
response.setResponseValue( encodedValue );
return response;
@@ -83,7 +84,15 @@ public class EndTransactionFactory implements ExtendedOperationFactory
@Override
public EndTransactionRequest newRequest( byte[] value )
{
- return new EndTransactionRequestDecorator( codec, new EndTransactionRequestImpl() );
+ EndTransactionRequestDecorator req =
+ new EndTransactionRequestDecorator( codec, new EndTransactionRequestImpl() );
+
+ if ( value != null )
+ {
+ req.setRequestValue( value );
+ }
+
+ return req;
}
@@ -98,7 +107,7 @@ public class EndTransactionFactory implements ExtendedOperationFactory
return ( EndTransactionRequestDecorator ) modelRequest;
}
- return new EndTransactionRequestDecorator( codec, null );
+ return new EndTransactionRequestDecorator( codec, ( EndTransactionRequest ) modelRequest );
}
@@ -106,13 +115,24 @@ public class EndTransactionFactory implements ExtendedOperationFactory
* {@inheritDoc}
*/
@Override
- public EndTransactionResponseDecorator decorate( ExtendedResponse decoratedMessage )
+ public EndTransactionResponseDecorator decorate( ExtendedResponse decoratedResponse )
{
- if ( decoratedMessage instanceof EndTransactionResponseDecorator )
+ if ( decoratedResponse instanceof EndTransactionResponseDecorator )
{
- return ( EndTransactionResponseDecorator ) decoratedMessage;
+ return ( EndTransactionResponseDecorator ) decoratedResponse;
}
- return new EndTransactionResponseDecorator( codec, null );
+ // It's an opaque extended operation
+ ExtendedResponseDecorator<ExtendedResponse> response =
+ ( ExtendedResponseDecorator<ExtendedResponse> ) decoratedResponse;
+
+ // Decode the response, as it's an opaque operation
+ EndTransactionResponse endTransactionResponse = new EndTransactionResponseImpl();
+
+ endTransactionResponse.setMessageId( response.getMessageId() );
+ endTransactionResponse.getLdapResult().setResultCode( response.getLdapResult().getResultCode() );
+ endTransactionResponse.getLdapResult().setDiagnosticMessage( response.getLdapResult().getDiagnosticMessage() );
+
+ return new EndTransactionResponseDecorator( codec, endTransactionResponse );
}
}
diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestDecorator.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestDecorator.java
index d338127..7273e92 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestDecorator.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestDecorator.java
@@ -120,6 +120,29 @@ public class EndTransactionRequestDecorator extends ExtendedRequestDecorator<End
* {@inheritDoc}
*/
@Override
+ public byte[] getRequestValue()
+ {
+ if ( requestValue == null )
+ {
+ try
+ {
+ requestValue = encodeInternal().array();
+ }
+ catch ( EncoderException e )
+ {
+ LOG.error( I18n.err( I18n.ERR_08232_END_TRANSACTION_PAYLOAD_ENCODING_FAILED ), e );
+ throw new RuntimeException( e );
+ }
+ }
+
+ return requestValue;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public void setRequestValue( byte[] requestValue )
{
EndTransactionRequestDecoder decoder = new EndTransactionRequestDecoder();
diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionResponseDecorator.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionResponseDecorator.java
index 8fa8ecd..ba488db 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionResponseDecorator.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionResponseDecorator.java
@@ -87,6 +87,16 @@ public class EndTransactionResponseDecorator extends ExtendedResponseDecorator<E
* {@inheritDoc}
*/
@Override
+ public byte[] getResponseValue()
+ {
+ return responseValue;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public void setResponseValue( byte[] responseValue )
{
EndTransactionResponseDecoder decoder = new EndTransactionResponseDecoder();
diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTransaction/StartTransactionFactory.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTransaction/StartTransactionFactory.java
index bd05b8d..1b0e709 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTransaction/StartTransactionFactory.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTransaction/StartTransactionFactory.java
@@ -23,6 +23,7 @@ package org.apache.directory.api.ldap.extras.extended.ads_impl.startTransaction;
import org.apache.directory.api.asn1.DecoderException;
import org.apache.directory.api.ldap.codec.api.ExtendedOperationFactory;
import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.decorators.ExtendedResponseDecorator;
import org.apache.directory.api.ldap.extras.extended.startTransaction.StartTransactionRequest;
import org.apache.directory.api.ldap.extras.extended.startTransaction.StartTransactionRequestImpl;
import org.apache.directory.api.ldap.extras.extended.startTransaction.StartTransactionResponse;
@@ -83,7 +84,15 @@ public class StartTransactionFactory implements ExtendedOperationFactory
@Override
public StartTransactionRequest newRequest( byte[] value )
{
- return new StartTransactionRequestDecorator( codec, new StartTransactionRequestImpl() );
+ StartTransactionRequestDecorator req =
+ new StartTransactionRequestDecorator( codec, new StartTransactionRequestImpl() );
+
+ if ( value != null )
+ {
+ req.setRequestValue( value );
+ }
+
+ return req;
}
@@ -113,6 +122,17 @@ public class StartTransactionFactory implements ExtendedOperationFactory
return ( StartTransactionResponseDecorator ) decoratedResponse;
}
- return new StartTransactionResponseDecorator( codec, ( StartTransactionResponse ) decoratedResponse );
+ // It's an opaque extended operation
+ ExtendedResponseDecorator<ExtendedResponse> response =
+ ( ExtendedResponseDecorator<ExtendedResponse> ) decoratedResponse;
+
+ // Decode the response, as it's an opaque operation
+ StartTransactionResponse startTransactionResponse = new StartTransactionResponseImpl( response.getResponseValue() );
+
+ startTransactionResponse.setMessageId( response.getMessageId() );
+ startTransactionResponse.getLdapResult().setResultCode( response.getLdapResult().getResultCode() );
+ startTransactionResponse.getLdapResult().setDiagnosticMessage( response.getLdapResult().getDiagnosticMessage() );
+
+ return new StartTransactionResponseDecorator( codec, startTransactionResponse );
}
}
diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTransaction/StartTransactionResponseDecorator.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTransaction/StartTransactionResponseDecorator.java
index 9374f08..b300f06 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTransaction/StartTransactionResponseDecorator.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTransaction/StartTransactionResponseDecorator.java
@@ -22,18 +22,10 @@ package org.apache.directory.api.ldap.extras.extended.ads_impl.startTransaction;
import org.apache.directory.api.ldap.codec.decorators.ExtendedResponseDecorator;
-import java.nio.ByteBuffer;
-
-import org.apache.directory.api.asn1.EncoderException;
-import org.apache.directory.api.asn1.ber.tlv.BerValue;
-import org.apache.directory.api.asn1.ber.tlv.TLV;
-import org.apache.directory.api.i18n.I18n;
import org.apache.directory.api.ldap.codec.api.LdapApiService;
import org.apache.directory.api.ldap.extras.extended.startTransaction.StartTransactionResponse;
import org.apache.directory.api.ldap.extras.extended.startTransaction.StartTransactionResponseImpl;
import org.apache.directory.api.util.Strings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
@@ -43,9 +35,6 @@ import org.slf4j.LoggerFactory;
*/
public class StartTransactionResponseDecorator extends ExtendedResponseDecorator<StartTransactionResponse> implements StartTransactionResponse
{
- /** A logger for this class */
- private static final Logger LOG = LoggerFactory.getLogger( StartTransactionResponseDecorator.class );
-
/** The startTransaction response */
private StartTransactionResponse startTransactionResponse;
@@ -70,15 +59,7 @@ public class StartTransactionResponseDecorator extends ExtendedResponseDecorator
{
if ( responseValue == null )
{
- try
- {
- responseValue = encodeInternal().array();
- }
- catch ( EncoderException e )
- {
- LOG.error( I18n.err( I18n.ERR_08231_START_TRANSACTION_PAYLOAD_ENCODING_FAILED ), e );
- throw new RuntimeException( e );
- }
+ responseValue = Strings.copy( startTransactionResponse.getTransactionId() );
}
return responseValue;
@@ -86,44 +67,6 @@ public class StartTransactionResponseDecorator extends ExtendedResponseDecorator
/**
- * Compute the StartTransactionResponse extended operation length
- * <pre>
- * 0x04 L1 transactionId
- * </pre>
- *
- * @return The extended operation's length
- */
- /* no qualifier */int computeLengthInternal()
- {
- if ( startTransactionResponse.getTransactionId() != null )
- {
- return 1 + TLV.getNbBytes( startTransactionResponse.getTransactionId().length )
- + startTransactionResponse.getTransactionId().length;
- }
- else
- {
- return 1 + 1;
- }
- }
-
-
- /**
- * Encodes the StartTransactionResponse extended operation.
- *
- * @return A ByteBuffer that contains the encoded PDU
- * @throws EncoderException If anything goes wrong.
- */
- /* no qualifier */ByteBuffer encodeInternal() throws EncoderException
- {
- ByteBuffer bb = ByteBuffer.allocate( computeLengthInternal() );
-
- BerValue.encode( bb, startTransactionResponse.getTransactionId() );
-
- return bb;
- }
-
-
- /**
* {@inheritDoc}
*/
@Override
diff --git a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponse.java b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponse.java
index 49a6983..49c5db2 100644
--- a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponse.java
+++ b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponse.java
@@ -44,4 +44,12 @@ public interface ExtendedResponse extends ResultResponse
* @param oid the OID of the extended response type.
*/
void setResponseName( String oid );
+
+
+ /**
+ * Gets the response value, if any.
+ *
+ * @return The byte[] containing the value, or null if we have none.
+ */
+ //byte[] getResponseValue();
}
diff --git a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponseImpl.java b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponseImpl.java
index 7c037bd..0ee2278 100644
--- a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponseImpl.java
+++ b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponseImpl.java
@@ -31,6 +31,9 @@ public class ExtendedResponseImpl extends AbstractResultResponse implements Exte
/** Object identifier for the extended response */
protected String responseName;
+
+ /** The ResponseValue part of the extended response */
+ //protected byte[] responseValue;
/** Extended response message type enumeration value */
private static final MessageTypeEnum TYPE = MessageTypeEnum.EXTENDED_RESPONSE;