Java Library / error of userListService.mutateMembers - SocketException: Broken pipe

122 views
Skip to first unread message

竹田祥

unread,
Feb 25, 2018, 9:40:27 AM2/25/18
to AdWords API Forum
Hi,

When calling userListService.mutateMembers, the following error appears.
Is there a way to fix this error?

2018-02-20T12:58:17.575 WARN [pool-4-thread-38] com.google.api.ads.adwords.lib.client.AdWordsServiceClient.requestInfoLogger [RemoteCallLoggerDelegate.java:148] Request made: Service: AdwordsUserListService Method: mutateMembers clientCustomerId: *** URL: https://adwords.google.com/api/adwords/rm/v201710/AdwordsUserListService Request ID: null ResponseTime(ms): null OperationsCount: null IsFault: true FaultMessage: javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLException: java.net.SocketException: Broken pipe
2018-02-20T12:58:17.588 ERROR [pool-4-thread-38] ***.ws.clients.GoogleApiClient [GoogleApiClient.java:281] cannot send emais error={}
org.apache.axis.AxisFault: ; nested exception is:
javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLException: java.net.SocketException: Broken pipe
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.google.api.ads.adwords.axis.v201710.rm.AdwordsUserListServiceSoapBindingStub.mutateMembers(AdwordsUserListServiceSoapBindingStub.java:1175)
at sun.reflect.GeneratedMethodAccessor219.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.google.api.ads.common.lib.soap.SoapClientHandler.invoke(SoapClientHandler.java:100)
at com.google.api.ads.common.lib.soap.axis.AxisHandler.invokeSoapCall(AxisHandler.java:234)
at com.google.api.ads.common.lib.soap.SoapServiceClient.callSoapClient(SoapServiceClient.java:63)
at com.google.api.ads.common.lib.soap.SoapServiceClient.invoke(SoapServiceClient.java:93)
at com.sun.proxy.$Proxy92.mutateMembers(Unknown Source)
at ***.ws.clients.GoogleApiClient.sendEmailAddresses(GoogleApiClient.java:279)
at ***.services.GoogleAudienceService$AddCustomerTask.sendEmailAddresses(GoogleAudienceService.java:262)
at ***.services.GoogleAudienceService$AddCustomerTask.addUserToUserList(GoogleAudienceService.java:249)
at ***.services.GoogleAudienceService$AddCustomerTask.call(GoogleAudienceService.java:209)
at ***.services.GoogleAudienceService$AddCustomerTask.call(GoogleAudienceService.java:186)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLException: java.net.SocketException: Broken pipe
at sun.security.ssl.SSLSocketImpl.checkEOF(SSLSocketImpl.java:1529)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:95)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
at org.apache.axis.transport.http.HTTPSender.readHeadersFromSocket(HTTPSender.java:583)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:143)
... 27 common frames omitted
Caused by: javax.net.ssl.SSLException: java.net.SocketException: Broken pipe
at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1937)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1894)
at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1858)
at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1803)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:128)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
at org.apache.axis.utils.ByteArray.writeTo(ByteArray.java:375)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:265)
at org.apache.axis.Message.writeTo(Message.java:539)
at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:511)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
... 27 common frames omitted
Caused by: java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
at sun.security.ssl.OutputRecord.writeBuffer(OutputRecord.java:431)
at sun.security.ssl.OutputRecord.write(OutputRecord.java:417)
at sun.security.ssl.SSLSocketImpl.writeRecordInternal(SSLSocketImpl.java:864)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:835)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
... 33 common frames omitted



The code looks something like this.

// Split target emails (10000)
List<String> sendEmails = new ArrayList<>(10000);
emails.forEach(email -> {
sendEmails.add(email);
if (sendEmails.size() >= 10000) {
try {
    sendEmailAddresses(sendEmails);
} catch (GoogleApiClient.GoogleException e) {
    new RuntimeException(e);
}
sendEmails.clear();
}
});

// call AdWords API
// Send email address to user list (user list is Already created)
private void sendEmailAddresses(List<String> sendEmails, String refreshToken, String customerId, String userListId) throws GoogleApiClient.GoogleException {
MutateMembersOperand operand = new MutateMembersOperand();
operand.setUserListId(Long.valueOf(userListId));
operand.setMembersList(emails.stream().map( s -> {
    Member member = new Member();
    member.setHashedEmail(getSha256(s.trim().toLowerCase()));
    return member;
}).collect(Collectors.toList()).toArray(new Member[emails.size()]));
MutateMembersOperation operation = new MutateMembersOperation();
operation.setOperand(operand);
operation.setOperator(Operator.ADD);
AdwordsUserListServiceInterface userListService = getUserListService(refreshToken, customerId);
userListService.mutateMembers(new MutateMembersOperation[]{operation});
}

best regards.
(Sorry I'm bad at English, google translation is wonderful !!)


竹田祥

unread,
Feb 25, 2018, 9:55:16 AM2/25/18
to AdWords API Forum
I tried it several times and it looks like the following.
send 1~500,000 mails : SUCCESS
send 500,000~900,000 mails : ERROR

2018年2月25日日曜日 23時40分27秒 UTC+9 竹田祥:

Luis Xander Talag (AdWords API Team)

unread,
Feb 25, 2018, 11:23:35 PM2/25/18
to AdWords API Forum
Hi Takeda,

This issue seems to be a network connection problem. To get the proper assistance, I suggest to post your issue with these logs to our Java client library owners as they are better equipped to assist you in this matter

Thanks and regards,
Luis
AdWords API Team

竹田祥

unread,
Feb 26, 2018, 12:01:46 AM2/26/18
to AdWords API Forum
Thanks!
i reported issue.


2018年2月26日月曜日 13時23分35秒 UTC+9 Luis Xander Talag (AdWords API Team):
Reply all
Reply to author
Forward
0 new messages