use of org.apache.directory.api.ldap.model.message.SearchResultReference in project directory-ldap-api by apache.
the class StoreReference method action.
/**
* {@inheritDoc}
*/
public void action(LdapMessageContainer<SearchResultReferenceDecorator> container) throws DecoderException {
SearchResultReference searchResultReference = container.getMessage();
// Get the Value and store it in the BindRequest
TLV tlv = container.getCurrentTLV();
// Get the referral, or create it if not existing
Referral referral = searchResultReference.getReferral();
if (referral == null) {
referral = new ReferralImpl();
searchResultReference.setReferral(referral);
}
// We have to handle the special case of a 0 length list of referrals
LdapUrl url = LdapUrl.EMPTY_URL;
if (tlv.getLength() == 0) {
referral.addLdapUrl("");
} else {
String urlStr = Strings.utf8ToString(tlv.getValue().getData());
try {
url = new LdapUrl(urlStr);
referral.addLdapUrl(urlStr);
} catch (LdapURLEncodingException luee) {
LOG.error(I18n.err(I18n.ERR_04021, urlStr, luee.getMessage()));
throw new DecoderException(I18n.err(I18n.ERR_04016, luee.getMessage()), luee);
}
}
if (IS_DEBUG) {
LOG.debug("Search reference URL found : {}", url);
}
// We can have an END transition
container.setGrammarEndAllowed(true);
}
use of org.apache.directory.api.ldap.model.message.SearchResultReference in project directory-ldap-api by apache.
the class EntryCursorImpl method next.
/**
* {@inheritDoc}
*/
@Override
public boolean next() throws LdapException, CursorException {
if (!searchCursor.next()) {
return false;
}
try {
do {
response = searchCursor.get();
if (response == null) {
throw new LdapException(LdapNetworkConnection.TIME_OUT_ERROR);
}
messageId = response.getMessageId();
if (response instanceof SearchResultEntry) {
return true;
}
if (response instanceof SearchResultReference) {
return true;
}
} while (!(response instanceof SearchResultDone));
return false;
} catch (Exception e) {
LdapException ldapException = new LdapException(LdapNetworkConnection.NO_RESPONSE_ERROR);
ldapException.initCause(e);
// close the cursor
try {
close(ldapException);
} catch (IOException ioe) {
throw new LdapException(ioe.getMessage(), ioe);
}
throw ldapException;
}
}
use of org.apache.directory.api.ldap.model.message.SearchResultReference in project directory-ldap-api by apache.
the class SearchResultReferenceTest method testResponseWith1EmptyRef.
/**
* Test parsing of a Response with 1 Ref
*/
@Test
public void testResponseWith1EmptyRef() {
Dsmlv2ResponseParser parser = null;
try {
parser = new Dsmlv2ResponseParser(getCodec());
parser.setInput(SearchResultReferenceTest.class.getResource("response_with_1_empty_ref.xml").openStream(), "UTF-8");
parser.parse();
} catch (Exception e) {
fail(e.getMessage());
}
SearchResultReference searchResultReference = ((SearchResponse) parser.getBatchResponse().getCurrentResponse().getDecorated()).getCurrentSearchResultReference();
Collection<String> references = searchResultReference.getReferral().getLdapUrls();
assertEquals(0, references.size());
}
use of org.apache.directory.api.ldap.model.message.SearchResultReference in project directory-ldap-api by apache.
the class SearchResultReferenceTest method testResponseWith3ControlsWithoutValue.
/**
* Test parsing of a response with 3 (optional) Control elements without value
*/
@Test
public void testResponseWith3ControlsWithoutValue() {
Dsmlv2ResponseParser parser = null;
try {
parser = new Dsmlv2ResponseParser(getCodec());
parser.setInput(SearchResultReferenceTest.class.getResource("response_with_3_controls_without_value.xml").openStream(), "UTF-8");
parser.parse();
} catch (Exception e) {
fail(e.getMessage());
}
SearchResultReference searchResultReference = ((SearchResponse) parser.getBatchResponse().getCurrentResponse().getDecorated()).getCurrentSearchResultReference();
Map<String, Control> controls = searchResultReference.getControls();
assertEquals(3, searchResultReference.getControls().size());
Control control = controls.get("1.2.840.113556.1.4.456");
assertNotNull(control);
assertTrue(control.isCritical());
assertEquals("1.2.840.113556.1.4.456", control.getOid());
assertFalse(((DsmlControl<?>) control).hasValue());
}
use of org.apache.directory.api.ldap.model.message.SearchResultReference in project directory-ldap-api by apache.
the class SearchResultReferenceTest method testResponseWith1Ref.
/**
* Test parsing of a Response with 1 Ref
*/
@Test
public void testResponseWith1Ref() {
Dsmlv2ResponseParser parser = null;
try {
parser = new Dsmlv2ResponseParser(getCodec());
parser.setInput(SearchResultReferenceTest.class.getResource("response_with_1_ref.xml").openStream(), "UTF-8");
parser.parse();
} catch (Exception e) {
fail(e.getMessage());
}
SearchResultReference searchResultReference = ((SearchResponse) parser.getBatchResponse().getCurrentResponse().getDecorated()).getCurrentSearchResultReference();
Collection<String> references = searchResultReference.getReferral().getLdapUrls();
assertEquals(1, references.size());
try {
assertTrue(references.contains(new LdapUrl("ldap://localhost").toString()));
} catch (LdapURLEncodingException e) {
fail();
}
}
Aggregations