- Now using Protobuf 3.6.0.
- Minor review in docs, dependencies.
- Now using Protobuf 3.5.0.
- Support for OpenRTB Native 1.2!
- Removed all DoubleClick Ad Exchange-specific mapping documentation that was present in [AdX:...] comments in the proto. People using the library for AdX should refer to the OpenRTB Integration Guide.
- The library now builds correctly, and is supported, on JDK 9.
- Dependency and proto documentation updates.
- Now using Protobuf 3.4.0.
- Only dependency updates.
- Fixed very minor bug in JSON support.
- Now using Protobuf 3.3.1.
- Support for OpenRTB 2.5!
- Updated Protocol Buffers to v3.2.0! You will need to install this exact version of protobuf, have it in the PATH, rebuild everything.
- OpenRTB proto update (docs only).
- Added some utility methods for JSON extensions.
- Removed
ObjectMapper
interface.
- Support for OpenRTB 2.4 & OpenRTB Native 1.1.
- This support needed source-breaking changes; several enums are now used by new messages so their original scope was a problem, so now ALL enums moved to the top-level scope. Existing source code will only need changes in imports.
- Because of the previous change, a few enum names and enum value
names had to be renamed to avoid conflicts (protobuf requires unique
enum values for all enums of the same scope):
DeviceType.PHONE
->HIGHEND_PHONE
;AdUnitId.CUSTOM
->ADUNITID_CUSTOM
. - The
Gender
enum was moved out of the proto, since the spec doesn't use numeric values for this and the single-letter codes like"M"
are too terse for enumerated value names. A new, regular Java enumGender
was added as replacement, providing a better API.
- Support for Native objects embedded as direct nodes inside the core
model, i.e.
"native": { "request": { "ver": "1", ... } }
, similar for response'sadm
field. This is an extension of the OpenRTB spec, but it's now clearly allowed by the standard and increasingly popular. Some exchanges may use alternate names for therequest
andadm
fields, and this core lib can't have this kind of exchange-specific behavior, but now it should be easy to support on top of the library. Thanks @bundeskanzler4711 for this contribution!
- Fixed native response's
Video.vasttag
to scalar value. - Several documentation updates in the openrtb protobuf.
- Reviews in
OpenRtbJsonUtils
. SnippetProcessor
allows reusing the internal string buffer; supports processing extended fields again but now as an option.- Reintroduced JDK 7 support in the "compat" branch.
SnippetProcessor
allows subclasses to extend the list of fields (includingBid
extensions) that support macros, and drops the built-in support toadm
only which is more OpenRTB-compliant.
- Fix
ProtoUtils.filter()
for recursive filtering. - JSON writer doesn't emit the top-level
native
field for native request or response objects. That was a poorly specified part of OpenRTB 2.3 & Native 1.0, clarified in the next releases but even in 2.4/1.0 this extra field should not be used. The factory has a new optionrootNativeField
to opt in the legacy writer's behavior. (The reader always accepted both forms.) - Mapping documentation added to the proto! The Google Sheet used for this documentation is now deprecated; just look up the proto, or the API docs in protoc-generated model classes (e.g. Javadoc for Java).
- Minor reviews in
OpenRtbJsonUtils
, javadocs, tests.
- Happy new year!! And here's the one-dot-zero release of the library. Series 1.0.x is now frozen, may be updated only for bugfixes.
- Only cleanups in this release: All deprecated methods removed; Dependency updates; Minor javadoc and test reviews.
- Improvements to
OpenRtbUtils
.
- THE BIG MOVE TO JAVA 8! The library now requires JDK 8, and takes
advantage of new APIs/features of Java 8.
ProtoUtils
andOpenRtbUtils
: parameters withFunction
orPredicate
APIs from Guava were changed to usejava.util.function
. Most code using these utilities should compile after fixing imports; code already passing lambdas for those parameters must be recompiled but needs no changes. Some utilities have new variants using streams, for exampleOpenRtbUtils.bidStreamWith()
; if you like streams, the new methods are easier and often more efficient than calling the old methods and doing your own conversion to aStream
.- We won't maintain a JDK 7 compatible version of the library; notice that JDK 7 was EOL'd since April 2015.
- JSON factory now enables strict parsing by default; previous behavior
was a bug. Use
setStrict(false)
if this breaks things for you. - In non-strict mode, the JSON readers will now return
null
instead of an exception if the input is empty.
- No changes! This release contains only a round of reviews in code style, javadocs, and unit tests (converted to Truth).
OpenRtbUtils
improved for filtering impressions with Native ads.
- OpenRTB proto schema review:
- Documentation updates; some fixes to field defaults.
- Mutually exclusive:
BidRequest.site/app
;Bid.adm/adm_native
;Native.request/request_native
(introducing the latter);Asset.title/img/video/data
for both Native request and response.
- JSON support:
- New config
OpenRtbJsonFactory.strict
. - Parsing of unknown enums improved, lenient and strict options.
- Reviews in the JSON extension APIs,
OpenRtbJsonExtWriter
andOpenRtbJsonExtReader
. The latter has breaking changes, and some implementations need to overrideOpenRtbJsonExtComplexReader
.
- New config
- Fixed typo
NoBidReason.BLOCKED_PUBISHER
->BLOCKED_PUBLISHER
.
- The
SnippetProcessor
API was improved for extensibility:- Subclasses can use specializations of
SnippetProcessorContext
. - Recursive macro expansion is supported. Notice the processor will
detect simple infinite recursion (
${X}
=>${X}
will stop: good for "pass-through" macros), but not indirect recursion (${X}
=>${Y}
=>${X}
or${X}
=>x${X}
:StackOverflowError
).
- Subclasses can use specializations of
- This release brings some breaking changes, but hopefully the last; now pending only field testing before the first stable, v1.0 release.
- Merge Native Ads into the same proto descriptor, so the generated
model moves from
OpenRtbNative.*
toOpenRtb.*
. The Native-specific and incompleteVideo
object is gone, now native requests reuse the core model'sVideo
. You need only to fiximport
statements. - Reverted some recent changes that would cause interoperability issues:
- Revert all
keywords
fields to be single strings with internal CSV content (instead of string arrays with automatic CSV conversion). - Revert all
ContentCategory
fields (bcat
,cat
,sectioncat
,pagecat
), andUser.gender
, from enum to string. You can still use the enum, converting with utility methods fromOpenRtbUtils
. The JSON serializer will also validate the string fields.
- Revert all
- Support for the OpenRTB 2.3.1 specification:
- Macro
${AUCTION_BID_ID}
expands toBidResponse.bidid
(not.id
) User.buyerid
fixed back tobuyeruid
. This was correct already in the library, but now the JSON parser will accept the wrong field namebuyerid
for backwards compatibility with the broken 2.3.0 spec.
- Macro
- Fixed JSON serialization of Native Ads.
- Fix
Bid.bcat
cardinality to repeated. - Fix
Asset.req
name torequired
. - Added
[packed=true]
qualifier to several fields.
- While you are distracted with Google IO, we're sneaking some painful
but necessary breaking changes. OpenRTB 2.3 finally provided clear,
normative names for all objects, so we're finally adopting these names
even though they have no impact at the JSON interop level:
Impression
renamed toImp
PMP
renamed toPmp
Regulations
renamed toRegs
- Also renamed a small number of enum names and enumerated values, for
different reasons (clarity, compatibility with internal Google systems):
ApiFramework
renamed toApiFramework
CompanionType
renamed toVASTCompanionType
AdType
renamed toBannerAdType
Protocol
renamed toVideoBidResponseProtocol
Linearity
renamed toVideoLinearity
PlaybackMethod
renamed toVideoPlaybackMethod
ContentDelivery
renamed toContentDeliveryMethod
Context
renamed toContentContext
NoBidReasonCode
renamed toNoBidReason
- Added to
DeviceType
some values we'd missed when they were introduced in OpenRTB 2.2:PHONE
,TABLET
,CONNECTED_DEVICE
,SET_TOP_BOX
.
- Added OpenRTB 2.1-compatible
CompanionAd
- Expanded the range of IDs reserved for extensions
- Fixed some field IDs for compatibility with internal Google systems
- JSON parsing lenient with unknown fields
- Improve
OpenRtbJsonFactory/Reader/Writer
for subclassing. This can be used for uncompliant extensions, seeOpenRtbExtJsonTest
.
- All
*cat
fields in the model are now typed as [arrays of] theContentCategory
enum, instead ofstring
s. User.gender
is now typed as theGender
enum.BidRequest/Deal.at
are now typed as theAuctionType
enum.
- Lots of changes/improvements in the JSON extension support:
- Public read/write methods to allow reuse by composition.
- Extension registry is now per message type instead of "paths", static-typed, allowing reuse of messages as part of extensions.
- Support for extensions of scalar types such as
int32
- Support for repeated extensions (of both message and scalar types).
- New
OpenRtbJsonExtReader/Writer
make simpler to write extensions.
- OpenRTB model reviews:
- Using protobuf deprecation for
Video.protocol
. - Documentation and ordering in sync with the latest specs.
- Some
required/optional
updated to match the OpenRTB 2.3 spec. Content.sourcerelationship
changed type tobool
.
- Using protobuf deprecation for
- Test coverage reviews.
- Logging updates, mostly avoiding multiline logs (bad for syslog).
- Removed error-prone from build, new version had some issues too.
- Support for Native Ads completed!
- Improvements in JSON support, esp. better compatibility with some OpenRTB-native exchanges and with OpenRTB 2.2 (thanks to github.com/matzi11a & Sojern).
(App/Site/User/Content).keywords
are now arrays in the model. They still map to a single, CSV-format string in the JSON.- The macro
${AUCTION_PRICE}
is not anymore translated to the bid price; this was a bug, this macro will proceed untouched (OpenRTB-native exchanges are supposed to expand it). - Updated to latest error-prone; now Maven build works with JDK 8!
- Partial support for OpenRTB 2.3! The missing item is Native ads, which depends on the OpenRTB Native 1.0 spec (proposed final draft at this time). This support will come in a future update.
- Breaking change: The
Flags
enum was replaced by simple booleans. - Breaking change: Renamed
DirectDeal
to justDeal
(to better match the spec, although object names are not really standardized). - New fields added (OpenRTB 2.3):
BidRequest.test
Site.mobile
Device
:w
,h
,pxratio
,ppi
,hwv
,lmt
Bid
:cat
,bundle
Geo.utcoffset
- Other fields added (missing from OpenRTB 2.2):
Device
:ifa
,macsha1
,macmd5
Impression
:secure
Video
:protocols
(the fieldprotocol
was deprecated; in the API it's renameddeprecated_protocol
, JSON will be compatible)BidResponse
:nbr
- Updated to Protocol Buffers 2.6.1 (bugfix, doesn't require rebuilds).
- Updated to Protocol Buffers 2.6.0. Full rebuild recommended, the code generated by protoc 2.6.0 is NOT 100% compatible with 2.5.0.
OpenRtbUtils.filterBids()
now usesBid.Builder
instead ofBid
.
- Javadocs for thead safety.
- Update Guava and Jackson libraries.
OpenRtbMapper
interface improved, supports all possible mappings.ProtoUtils.filter()
optimized, benefitsOpenRtbUtils.filterBids()
.
OpenRtbJson
API review and javadocs.OpenRtbValidator
reviews, improved logging.
- Fix floating-point fields to double precision.
- Remove dependencies jackson-databind, jackson-annotations.
- Build system improvements (Maven, Eclipse, NetBeans).
- Initial Open Source release.