blob: c12996bd38b709a39eb43c0d30d5303bf3b29073 [file] [log] [blame]
/*
* Copyright (c) 2014, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Martin Vojtek - 2.6 - initial implementation
package org.eclipse.persistence.testing.perf.smallxml;
import java.io.ByteArrayOutputStream;
import java.io.StringWriter;
import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.Marshaller;
import jakarta.xml.bind.Unmarshaller;
import org.eclipse.persistence.testing.perf.smallxml.workorder.DoWorkItem;
import org.eclipse.persistence.testing.perf.smallxml.workorder.DoWorkItemResponse;
import org.eclipse.persistence.testing.perf.smallxml.workorder.ObjectFactory;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.infra.Blackhole;
/**
* This benchmark demonstrates small xml marshal and unmarshal.
*
* @author Martin Vojtek (martin.vojtek@oracle.com)
*
*/
@State(Scope.Benchmark)
public class SmallXmlBenchmark {
private static final String DO_WORK_ITEM_XML = "org/eclipse/persistence/testing/perf/smallxml/workorder/doWorkItem.xml";
private static final String DO_WORK_ITEM_RESPONSE_XML = "org/eclipse/persistence/testing/perf/smallxml/workorder/doWorkItemResponse.xml";
private JAXBContext jaxbContext;
private DoWorkItem doWorkItem;
private DoWorkItemResponse doWorkItemResponse;
/*
* Initial setup.
*/
@Setup
public void prepare() throws Exception {
prepareJAXBContext();
prepareDoWorkItem();
prepareDoWorkItemResponse();
}
@Benchmark
public void testWorkOrderUnmarshal(Blackhole bh) throws Exception {
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Object workOrderItemElement = unmarshaller.unmarshal(Thread.currentThread().getContextClassLoader().getResource(DO_WORK_ITEM_XML));
bh.consume(workOrderItemElement);
}
@Benchmark
public void testWorkOrderMarshal(Blackhole bh) throws Exception {
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
StringWriter writer = new StringWriter();
marshaller.marshal(doWorkItem, writer);
bh.consume(writer);
}
@Benchmark
public void testWorkOrderOutputStreamMarshal(Blackhole bh) throws Exception {
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
marshaller.marshal(doWorkItem, baos);
bh.consume(baos.toString());
}
@Benchmark
public void testWorkOrderResponseUnmarshal(Blackhole bh) throws Exception {
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Object workOrderItemElement = unmarshaller.unmarshal(Thread.currentThread().getContextClassLoader().getResource(DO_WORK_ITEM_RESPONSE_XML));
bh.consume(workOrderItemElement);
}
@Benchmark
public void testWorkOrderResponseMarshal(Blackhole bh) throws Exception {
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
StringWriter writer = new StringWriter();
marshaller.marshal(doWorkItemResponse, writer);
bh.consume(writer);
}
@Benchmark
public void testWorkOrderResponseOutputStreamMarshal(Blackhole bh) throws Exception {
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
marshaller.marshal(doWorkItemResponse, baos);
bh.consume(baos.toString());
}
private void prepareDoWorkItemResponse() {
doWorkItemResponse = new DoWorkItemResponse();
doWorkItemResponse.setReturn(true);
}
private void prepareDoWorkItem() {
doWorkItem = new DoWorkItem();
doWorkItem.setWid(5);
doWorkItem.setWorkLocation(7);
}
private void prepareJAXBContext() throws Exception {
jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
}
}