use of com.fasterxml.jackson.core.JsonFactory in project YCSB by brianfrankcooper.
the class CouchbaseClient method encode.
/**
* Encode the object for couchbase storage.
*
* @param source the source value.
* @return the storable object.
*/
private Object encode(final HashMap<String, ByteIterator> source) {
HashMap<String, String> stringMap = StringByteIterator.getStringMap(source);
if (!useJson) {
return stringMap;
}
ObjectNode node = JSON_MAPPER.createObjectNode();
for (Map.Entry<String, String> pair : stringMap.entrySet()) {
node.put(pair.getKey(), pair.getValue());
}
JsonFactory jsonFactory = new JsonFactory();
Writer writer = new StringWriter();
try {
JsonGenerator jsonGenerator = jsonFactory.createGenerator(writer);
JSON_MAPPER.writeTree(jsonGenerator, node);
} catch (Exception e) {
throw new RuntimeException("Could not encode JSON value");
}
return writer.toString();
}
use of com.fasterxml.jackson.core.JsonFactory in project buck by facebook.
the class JsonMatcher method matchesSafely.
@Override
protected boolean matchesSafely(String actualJson, Description description) {
try {
JsonFactory factory = MAPPER.getFactory();
JsonParser jsonParser = factory.createParser(String.format(expectedJson));
JsonNode expectedObject = MAPPER.readTree(jsonParser);
jsonParser = factory.createParser(actualJson);
JsonNode actualObject = MAPPER.readTree(jsonParser);
if (!matchJsonObjects("/", expectedObject, actualObject, description)) {
description.appendText(String.format(" in <%s>", actualJson));
return false;
}
} catch (IOException e) {
description.appendText(String.format("could not parse the following into a json object: <%s>", actualJson));
return false;
}
return true;
}
use of com.fasterxml.jackson.core.JsonFactory in project buck by facebook.
the class OfflineScribeLoggerTest method unsentLinesStoredForOffline.
@Test
public void unsentLinesStoredForOffline() throws Exception {
final String whitelistedCategory = "whitelisted_category";
final String whitelistedCategory2 = "whitelisted_category_2";
final String blacklistedCategory = "blacklisted_category";
final ImmutableList<String> blacklistCategories = ImmutableList.of(blacklistedCategory);
final int maxScribeOfflineLogsKB = 7;
final ProjectFilesystem filesystem = new ProjectFilesystem(tmp.getRoot());
final Path logDir = filesystem.getBuckPaths().getOfflineLogDir();
final ObjectMapper objectMapper = ObjectMappers.newDefaultInstance();
String[] ids = { "test1", "test2", "test3", "test4" };
char[] longLineBytes = new char[1000];
Arrays.fill(longLineBytes, 'A');
String longLine = new String(longLineBytes);
char[] tooLongLineBytes = new char[6000];
Arrays.fill(longLineBytes, 'A');
String tooLongLine = new String(tooLongLineBytes);
// As we set max space for logs to 7KB, then we expect storing data with 2 'longLine' (which,
// given UTF-8 is used, will be ~ 2 * 1KB) to succeed. We then expect subsequent attempt to
// store data with 'tooLongLine' (~6KB) to fail. We also expect that logfile created by first
// fakeLogger ('test1' id) will be removed as otherwise data from last logger would not fit.
//
// Note that code sending already stored offline logs will be triggered by the first log() as
// it succeeds, but further failing log() (and initiating storing) will stop sending. Hence, no
// logs will be deleted due to the sending routine.
FakeFailingOfflineScribeLogger fakeLogger = null;
for (String id : ids) {
fakeLogger = new FakeFailingOfflineScribeLogger(blacklistCategories, maxScribeOfflineLogsKB, filesystem, logDir, objectMapper, new BuildId(id));
// Simulate network issues occurring for some of sending attempts (all after first one).
// Logging succeeds.
fakeLogger.log(whitelistedCategory, ImmutableList.of("hello world 1", "hello world 2"));
// Logging fails.
fakeLogger.log(whitelistedCategory, ImmutableList.of("hello world 3", "hello world 4"));
// Event with blacklisted category for offline logging.
fakeLogger.log(blacklistedCategory, ImmutableList.of("hello world 5", "hello world 6"));
// Logging fails.
fakeLogger.log(whitelistedCategory2, ImmutableList.of(longLine, longLine));
// Logging fails, but offline logging rejects data as well - too big.
fakeLogger.log(whitelistedCategory2, ImmutableList.of(tooLongLine));
fakeLogger.close();
}
// Check correct logs are in the directory (1st log removed).
Path[] expectedLogPaths = FluentIterable.from(ImmutableList.copyOf(ids)).transform(id -> filesystem.resolve(logDir.resolve(LOGFILE_PREFIX + id + LOGFILE_SUFFIX))).toArray(Path.class);
ImmutableSortedSet<Path> logs = filesystem.getMtimeSortedMatchingDirectoryContents(logDir, LOGFILE_PATTERN);
assertThat(logs, Matchers.allOf(hasItem(expectedLogPaths[1]), hasItem(expectedLogPaths[2]), hasItem(expectedLogPaths[3]), IsIterableWithSize.<Path>iterableWithSize(3)));
// Check that last logger logged correct data.
assertEquals(3, fakeLogger.getAttemptStoringCategoriesWithLinesCount());
InputStream logFile = fakeLogger.getStoredLog();
String[] whitelistedCategories = { whitelistedCategory, whitelistedCategory2 };
String[][] whitelistedLines = { { "hello world 3", "hello world 4" }, { longLine, longLine } };
Iterator<ScribeData> it = null;
try {
it = new ObjectMapper().readValues(new JsonFactory().createParser(logFile), ScribeData.class);
} catch (Exception e) {
fail("Obtaining iterator for reading the log failed.");
}
int dataNum = 0;
try {
while (it.hasNext()) {
assertTrue(dataNum < 2);
ScribeData data = it.next();
assertThat(data.getCategory(), is(whitelistedCategories[dataNum]));
assertThat(data.getLines(), Matchers.allOf(hasItem(whitelistedLines[dataNum][0]), hasItem(whitelistedLines[dataNum][1]), IsIterableWithSize.<String>iterableWithSize(2)));
dataNum++;
}
} catch (Exception e) {
fail("Reading stored offline log failed.");
}
logFile.close();
assertEquals(2, dataNum);
}
use of com.fasterxml.jackson.core.JsonFactory in project midpoint by Evolveum.
the class MidpointRestSecurityQuestionsAuthenticator method createAuthenticationContext.
@Override
protected SecurityQuestionsAuthenticationContext createAuthenticationContext(AuthorizationPolicy policy, ContainerRequestContext requestCtx) {
JsonFactory f = new JsonFactory();
ObjectMapper mapper = new ObjectMapper(f);
JsonNode node = null;
try {
node = mapper.readTree(policy.getAuthorization());
} catch (IOException e) {
RestServiceUtil.createSecurityQuestionAbortMessage(requestCtx, "{" + USER_CHALLENGE + "}");
return null;
}
JsonNode userNameNode = node.findPath("user");
if (userNameNode instanceof MissingNode) {
RestServiceUtil.createSecurityQuestionAbortMessage(requestCtx, "{" + USER_CHALLENGE + "}");
return null;
}
String userName = userNameNode.asText();
policy.setUserName(userName);
JsonNode answerNode = node.findPath("answer");
if (answerNode instanceof MissingNode) {
SecurityContextHolder.getContext().setAuthentication(new AnonymousAuthenticationToken("restapi", "REST", AuthorityUtils.createAuthorityList("ROLE_ANONYMOUS")));
SearchResultList<PrismObject<UserType>> users = null;
try {
users = searchUser(userName);
} finally {
SecurityContextHolder.getContext().setAuthentication(null);
}
if (users.size() != 1) {
requestCtx.abortWith(Response.status(Status.UNAUTHORIZED).header("WWW-Authenticate", "Security question authentication failed. Incorrect username and/or password").build());
return null;
}
PrismObject<UserType> user = users.get(0);
PrismContainer<SecurityQuestionAnswerType> questionAnswerContainer = user.findContainer(SchemaConstants.PATH_SECURITY_QUESTIONS_QUESTION_ANSWER);
if (questionAnswerContainer == null || questionAnswerContainer.isEmpty()) {
requestCtx.abortWith(Response.status(Status.UNAUTHORIZED).header("WWW-Authenticate", "Security question authentication failed. Incorrect username and/or password").build());
return null;
}
String questionChallenge = "";
List<SecurityQuestionDefinitionType> questions = null;
try {
SecurityContextHolder.getContext().setAuthentication(new AnonymousAuthenticationToken("restapi", "REST", AuthorityUtils.createAuthorityList("ROLE_ANONYMOUS")));
questions = getQuestions(user);
} finally {
SecurityContextHolder.getContext().setAuthentication(null);
}
Collection<SecurityQuestionAnswerType> questionAnswers = questionAnswerContainer.getRealValues();
Iterator<SecurityQuestionAnswerType> questionAnswerIterator = questionAnswers.iterator();
while (questionAnswerIterator.hasNext()) {
SecurityQuestionAnswerType questionAnswer = questionAnswerIterator.next();
SecurityQuestionDefinitionType question = questions.stream().filter(q -> q.getIdentifier().equals(questionAnswer.getQuestionIdentifier())).findFirst().get();
String challenge = QUESTION.replace(Q_ID, question.getIdentifier());
questionChallenge += challenge.replace(Q_TXT, question.getQuestionText());
if (questionAnswerIterator.hasNext()) {
questionChallenge += ",";
}
}
String userChallenge = USER_CHALLENGE.replace("username", userName);
String challenge = "{" + userChallenge + ", \"answer\" : [" + questionChallenge + "]}";
RestServiceUtil.createSecurityQuestionAbortMessage(requestCtx, challenge);
return null;
}
ArrayNode answers = (ArrayNode) answerNode;
Iterator<JsonNode> answersList = answers.elements();
Map<String, String> questionAnswers = new HashMap<>();
while (answersList.hasNext()) {
JsonNode answer = answersList.next();
String questionId = answer.findPath("qid").asText();
String questionAnswer = answer.findPath("qans").asText();
questionAnswers.put(questionId, questionAnswer);
}
return new SecurityQuestionsAuthenticationContext(userName, questionAnswers);
}
use of com.fasterxml.jackson.core.JsonFactory in project jackson-core by FasterXML.
the class TestJDKSerializability method testParseException.
public void testParseException() throws Exception {
JsonFactory jf = new JsonFactory();
JsonParser p = jf.createParser(" { garbage! }");
JsonParseException exc = null;
try {
p.nextToken();
p.nextToken();
fail("Should not get here");
} catch (JsonParseException e) {
exc = e;
}
p.close();
byte[] stuff = jdkSerialize(exc);
JsonParseException result = jdkDeserialize(stuff);
assertNotNull(result);
}
Aggregations