googleads-java-lib icon indicating copy to clipboard operation
googleads-java-lib copied to clipboard

Invalid XML Character fails CMS Metada Service API

Open mmfaizals opened this issue 3 years ago • 2 comments

Invalid XML character in cms metadata API response causes failure in parsing

Example response :

<getCmsMetadataValuesByStatementResponse
                        xmlns="https://www.google.com/apis/ads/publisher/v202105">
                        <rval>
                            <totalResultSetSize>4743558</totalResultSetSize>
                            <startIndex>1562500</startIndex>
                            <results>
                                <cmsMetadataValueId>5921712000</cmsMetadataValueId>
                                <valueName>&#xD83D;&#xDD34; minecraft xbox mini games livestream</valueName>
                                <key>
                                    <id>12697</id>
                                    <name>keywords</name>
                                    <status>ACTIVE</status>
                                </key>
                                <status>ACTIVE</status>
                            </results>

Stacktrace :

Fatal Error] :1:58805: Character reference "&#xD83D" is an invalid XML character.
[Sep 09 07:20:36] [d9f62cac6bf545bfbdb16acd85aef077/247051] WARN  com.google.api.ads.common.lib.utils.logging.AdsServiceLoggers.ads_api_lib (PrettyPrinter.java:123) - Unable to pretty print XML: {}
javax.xml.transform.TransformerException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 58805; Character reference "&#xD83D" is an invalid XML character.
        at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:501)
        at com.google.api.ads.common.lib.utils.logging.PrettyPrinter.formatXml(PrettyPrinter.java:120)
        at com.google.api.ads.common.lib.utils.logging.PrettyPrinter.prettyPrint(PrettyPrinter.java:106)
        at com.google.api.ads.common.lib.utils.logging.RemoteCallLoggerDelegate.logRequestDetails(RemoteCallLoggerDelegate.java:108)
        at com.google.api.ads.common.lib.utils.logging.AdsServiceLoggers.logRequest(AdsServiceLoggers.java:61)
        at com.google.api.ads.common.lib.client.AdsServiceClient.logSoapCall(AdsServiceClient.java:94)
        at com.google.api.ads.common.lib.soap.SoapServiceClient.invoke(SoapServiceClient.java:95)
        at com.sun.proxy.$Proxy121.getCmsMetadataValuesByStatement(Unknown Source)

mmfaizals avatar Oct 01 '21 08:10 mmfaizals

Hey @christopherseeley could you take a look?

nwbirnie avatar Oct 05 '21 12:10 nwbirnie

This is an issue with how the library handles logging. The response is correctly read by the Axis SOAP deserializer, but not by our logger's XML parser.

This doesn't block your application from getting the data, but you will have spurious error logs.

christopherseeley avatar Dec 02 '21 16:12 christopherseeley