- Removed support for JSON serialization.
- Proto updates (documentation only).
- Build/dependency updates.
- Proto updates (documentation only).
- Build/dependency updates.
- Proto updates (documentation only).
- Build/dependency updates.
- Proto updates (documentation only).
- Build/dependency updates.
- Build/dependency updates.
- Build/dependency updates, code cleanups.
- Add new macros:
${AUCTION_LOSS},${AUCTION_MBR}.
- Proto updates (documentation only).
- OpenRtbSnippetProcessor now supports macro expansion in the fields
Bid.burlandBid.lurl(introduced in OpenRTB 2.5).
- Now using Protobuf 3.6.1.
- 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
ObjectMapperinterface.
- 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
Genderenum 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 enumGenderwas 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'sadmfield. 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 therequestandadmfields, 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.vasttagto scalar value. - Several documentation updates in the openrtb protobuf.
- Reviews in
OpenRtbJsonUtils. SnippetProcessorallows reusing the internal string buffer; supports processing extended fields again but now as an option.- Reintroduced JDK 7 support in the "compat" branch.
SnippetProcessorallows subclasses to extend the list of fields (includingBidextensions) that support macros, and drops the built-in support toadmonly which is more OpenRTB-compliant.
- Fix
ProtoUtils.filter()for recursive filtering. - JSON writer doesn't emit the top-level
nativefield 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 optionrootNativeFieldto 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.
ProtoUtilsandOpenRtbUtils: parameters withFunctionorPredicateAPIs 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
nullinstead 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).
OpenRtbUtilsimproved 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/datafor 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,
OpenRtbJsonExtWriterandOpenRtbJsonExtReader. The latter has breaking changes, and some implementations need to overrideOpenRtbJsonExtComplexReader.
- New config
- Fixed typo
NoBidReason.BLOCKED_PUBISHER->BLOCKED_PUBLISHER.
- The
SnippetProcessorAPI 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 incompleteVideoobject is gone, now native requests reuse the core model'sVideo. You need only to fiximportstatements. - Reverted some recent changes that would cause interoperability issues:
- Revert all
keywordsfields to be single strings with internal CSV content (instead of string arrays with automatic CSV conversion). - Revert all
ContentCategoryfields (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.buyeridfixed back tobuyeruid. This was correct already in the library, but now the JSON parser will accept the wrong field namebuyeridfor backwards compatibility with the broken 2.3.0 spec.
- Macro
- Fixed JSON serialization of Native Ads.
- Fix
Bid.bcatcardinality to repeated. - Fix
Asset.reqname 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:
Impressionrenamed toImpPMPrenamed toPmpRegulationsrenamed toRegs
- Also renamed a small number of enum names and enumerated values, for
different reasons (clarity, compatibility with internal Google systems):
ApiFrameworkrenamed toApiFrameworkCompanionTyperenamed toVASTCompanionTypeAdTyperenamed toBannerAdTypeProtocolrenamed toVideoBidResponseProtocolLinearityrenamed toVideoLinearityPlaybackMethodrenamed toVideoPlaybackMethodContentDeliveryrenamed toContentDeliveryMethodContextrenamed toContentContextNoBidReasonCoderenamed toNoBidReason
- Added to
DeviceTypesome 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/Writerfor subclassing. This can be used for uncompliant extensions, seeOpenRtbExtJsonTest.
- All
*catfields in the model are now typed as [arrays of] theContentCategoryenum, instead ofstrings. User.genderis now typed as theGenderenum.BidRequest/Deal.atare now typed as theAuctionTypeenum.
- 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/Writermake simpler to write extensions.
- OpenRTB model reviews:
- Using protobuf deprecation for
Video.protocol. - Documentation and ordering in sync with the latest specs.
- Some
required/optionalupdated to match the OpenRTB 2.3 spec. Content.sourcerelationshipchanged 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).keywordsare 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
Flagsenum was replaced by simple booleans. - Breaking change: Renamed
DirectDealto justDeal(to better match the spec, although object names are not really standardized). - New fields added (OpenRTB 2.3):
BidRequest.testSite.mobileDevice:w,h,pxratio,ppi,hwv,lmtBid:cat,bundleGeo.utcoffset
- Other fields added (missing from OpenRTB 2.2):
Device:ifa,macsha1,macmd5Impression:secureVideo:protocols(the fieldprotocolwas 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.Builderinstead ofBid.
- Javadocs for thead safety.
- Update Guava and Jackson libraries.
OpenRtbMapperinterface improved, supports all possible mappings.ProtoUtils.filter()optimized, benefitsOpenRtbUtils.filterBids().
OpenRtbJsonAPI review and javadocs.OpenRtbValidatorreviews, 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.