def _java_method_replace(self): methods = {} compound_type_name = self.java_name() all_field_names = [field.java_name() for field in self.fields] for field_i, field in enumerate(self.fields): field_name = field.java_name() field_parameter = field.java_parameter(final=True) all_field_names = [] for other_field_i, other_field in enumerate(self.fields): if field_i == other_field_i: all_field_names.append(field.java_name()) else: all_field_names.append('this.' + other_field.java_name()) all_field_names = ', '.join(all_field_names) method_name = 'replace' + upper_camelize(field.name) methods[method_name] = """\ public %(compound_type_name)s %(method_name)s(%(field_parameter)s) { return new %(compound_type_name)s(%(all_field_names)s); }""" % locals() if not field.required: field_parameter = 'final ' + field.type.java_declaration_name() + ' ' + field.java_name() methods[method_name + 'Ex'] = """\ public %(compound_type_name)s %(method_name)s(%(field_parameter)s) { return %(method_name)s(com.google.common.base.Optional.fromNullable(%(field_name)s)); }""" % locals() return methods
def java_definitions(self): annotations = lpad("\n", "\n".join(self.java_annotations())) name = self.java_name() public_parameters = \ ', '.join(parameter.java_parameter(final=True) for parameter in self.parameters) public_parameter_names = ', '.join( parameter.java_name() for parameter in self.parameters) parameter_validations = [] request_type_name = self.java_request_type().java_name() service_qname = JavaService.java_qname(self.parent) for parameter in self.parameters: parameter_name = parameter.java_name() parameter_validate_method_name = parameter.java_validate_method_name( ) parameter_validations.append( "%(service_qname)s.Messages.%(request_type_name)s.DefaultConstructionValidator.getInstance().%(parameter_validate_method_name)s(%(parameter_name)s);" % locals()) if len(parameter_validations) > 0: parameter_validations = \ "\n".join(indent(' ' * 4, parameter_validations)) validate_method_name = '_validate' + upper_camelize( self.name) + 'Parameters' validate_method = lpad( "\n\n", """\ protected void %(validate_method_name)s(%(public_parameters)s) { %(parameter_validations)s }""" % locals()) validate_method_call = lpad( "\n", indent( ' ' * 4, "%s(%s);" % (validate_method_name, public_parameter_names))) else: validate_method = validate_method_call = '' delegation = \ "delegate.%s(%s)" % (name, ', '.join(parameter.java_name() for parameter in self.parameters)) if self.return_field is not None: response_type_name = self.java_response_type().java_name() return_field_validate_method_name = self.return_field.java_validate_method_name( ) delegation = "return %(service_qname)s.Messages.%(response_type_name)s.DefaultConstructionValidator.getInstance().%(return_field_validate_method_name)s(%(delegation)s)" % locals( ) return_type_name = self.return_field.type.java_qname() else: return_type_name = 'void' throws = \ lpad( ' throws ', ', '.join(field.type.java_qname() for field in self.throws) ) return [ """\ @Override%(annotations)s public final %(return_type_name)s %(name)s(%(public_parameters)s)%(throws)s {%(validate_method_call)s %(delegation)s; }%(validate_method)s """ % locals() ] + self._java_delegating_definitions()
def _java_method_replace(self): methods = {} compound_type_name = self.java_name() all_field_names = [field.java_name() for field in self.fields] for field_i, field in enumerate(self.fields): field_name = field.java_name() field_parameter = field.java_parameter(final=True) all_field_names = [] for other_field_i, other_field in enumerate(self.fields): if field_i == other_field_i: all_field_names.append(field.java_name()) else: all_field_names.append('this.' + other_field.java_name()) all_field_names = ', '.join(all_field_names) method_name = 'replace' + upper_camelize(field.name) methods[method_name] = """\ public %(compound_type_name)s %(method_name)s(%(field_parameter)s) { return new %(compound_type_name)s(%(all_field_names)s); }""" % locals() if not field.required: field_parameter = 'final ' + field.type.java_declaration_name( ) + ' ' + field.java_name() methods[method_name + 'Ex'] = """\ public %(compound_type_name)s %(method_name)s(%(field_parameter)s) { return %(method_name)s(com.google.common.base.Optional.fromNullable(%(field_name)s)); }""" % locals() return methods
def cpp_sync_handler(self): name = self.cpp_name() response_name = upper_camelize(self.__parent_function.cpp_name()) + 'Response' if self.__parent_function.return_field is not None: call_prefix = "request.respond(%(response_name)s(" % locals() call_suffix = "))" else: call_prefix = '' call_suffix = """; request.respond(%(response_name)s())""" % locals() call_parameters = \ ', '.join("request.%s()" % parameter.cpp_getter_name() for parameter in self.fields) call_method_name = self.__parent_function.name call = "%(call_prefix)simpl_->%(call_method_name)s(%(call_parameters)s)%(call_suffix)s;" % locals() if len(self.__parent_function.throws) > 0: catches = [] for exception in self.__parent_function.throws: exception_name = exception.cpp_name() exception_type_qname = exception.type.cpp_qname() catches.append("""\ } catch (const %(exception_type_qname)s& %(exception_name)s) { request.respond(%(exception_name)s);""" % locals()) catches = "\n".join(catches) + "\n}" call = indent(' ' * 2, call) call = """\ try { %(call)s %(catches)s""" % locals() call = indent(' ' * 2, call) return """\ virtual void handle(const %(name)s& request) { %(call)s }""" % locals()
def _java_method_replacers(self): methods = {} compound_type_name = self.java_name() for field_i, field in enumerate(self.fields): field_name = field.java_name() field_parameter = field.java_parameter(final=True) constructor_parameters = [] for other_field_i, other_field in enumerate(self.fields): if field_i == other_field_i: constructor_parameters.append("DefaultConstructionValidator.getInstance().%s(%s)" % (field.java_validate_method_name(), field.java_name())) else: constructor_parameters.append('this.' + other_field.java_name()) constructor_parameters.append('NopConstructionValidator.getInstance()') constructor_parameters = ', '.join(constructor_parameters) method_name = 'replace' + upper_camelize(field.name) methods[method_name] = """\ public %(compound_type_name)s %(method_name)s(%(field_parameter)s) { return new %(compound_type_name)s(%(constructor_parameters)s); }""" % locals() if not field.required: field_parameter = 'final ' + field.type.java_qname() + ' ' + field.java_name() methods[method_name + 'Ex'] = """\ public %(compound_type_name)s %(method_name)s(%(field_parameter)s) { return %(method_name)s(com.google.common.base.Optional.fromNullable(%(field_name)s)); }""" % locals() return methods
def _java_method_replacers(self): methods = {} compound_type_name = self.java_name() for field_i, field in enumerate(self.fields): field_name = field.java_name() field_parameter = field.java_parameter(final=True) constructor_parameters = [] for other_field_i, other_field in enumerate(self.fields): if field_i == other_field_i: constructor_parameters.append( "DefaultConstructionValidator.getInstance().%s(%s)" % (field.java_validate_method_name(), field.java_name())) else: constructor_parameters.append('this.' + other_field.java_name()) constructor_parameters.append( 'NopConstructionValidator.getInstance()') constructor_parameters = ', '.join(constructor_parameters) method_name = 'replace' + upper_camelize(field.name) methods[method_name] = """\ public %(compound_type_name)s %(method_name)s(%(field_parameter)s) { return new %(compound_type_name)s(%(constructor_parameters)s); }""" % locals() if not field.required: field_parameter = 'final ' + field.type.java_qname( ) + ' ' + field.java_name() methods[method_name + 'Ex'] = """\ public %(compound_type_name)s %(method_name)s(%(field_parameter)s) { return %(method_name)s(com.google.common.base.Optional.fromNullable(%(field_name)s)); }""" % locals() return methods
def __init__(self, parent_function): PyFunction._PyMessageType.__init__( self, name=upper_camelize(parent_function.name) + 'Response', parent=parent_function.parent ) if parent_function.return_field is not None: self.fields.append(parent_function.return_field)
def __init__(self, parent_function): DartStructType.__init__( self, name=upper_camelize(parent_function.name) + 'Response', parent=parent_function.parent ) if parent_function.return_field is not None: self.fields.append(parent_function.return_field)
def __init__(self, parent_function, java_suppress_warnings=None): JavaFunction._JavaMessageType.__init__( self, java_class_modifiers='public final static', java_suppress_warnings=java_suppress_warnings, name=upper_camelize(parent_function.name) + 'Response', parent=parent_function.parent) if parent_function.return_field is not None: self.fields.append(parent_function.return_field)
def java_getter_name(self): getter_name = upper_camelize(self.name) if isinstance(self.type, JavaBoolType) and self.required: if getter_name.startswith('Is'): return 'is' + getter_name[2:] else: return 'is' + getter_name else: return 'get' + getter_name
def __init__(self, parent_function, java_suppress_warnings=None): JavaFunction._JavaMessageType.__init__( self, java_class_modifiers='public final static', java_suppress_warnings=java_suppress_warnings, name=upper_camelize(parent_function.name) + 'Response', parent=parent_function.parent ) if parent_function.return_field is not None: self.fields.append(parent_function.return_field)
def __repr__(self): annotations = lpad("\n", "\n".join(self.java_annotations())) name = self.java_name() public_parameters = \ ', '.join(parameter.java_parameter(final=True) for parameter in self.parameters) public_parameter_names = ', '.join(parameter.java_name() for parameter in self.parameters) parameter_validations = [] for parameter in self.parameters: parameter_validation = parameter.java_validation() if parameter_validation != parameter.java_name(): parameter_validations.append(parameter_validation + ';') if len(parameter_validations) > 0: parameter_validations = \ "\n".join(indent(' ' * 4, parameter_validations)) validate_method_name = '_validate' + upper_camelize(self.name) + 'Parameters' validate_method = lpad("\n\n", """\ protected void %(validate_method_name)s(%(public_parameters)s) { %(parameter_validations)s }""" % locals()) validate_method_call = lpad("\n", indent(' ' * 4, "%s(%s);" % (validate_method_name, public_parameter_names))) else: validate_method = validate_method_call = '' protected_parameters = [parameter.java_parameter(final=True) for parameter in self.parameters] protected_parameter_names = [parameter.java_name() for parameter in self.parameters] if self.parent.parent.parent._include_current_user: protected_parameters.insert(0, 'org.apache.shiro.subject.Subject currentUser') protected_parameter_names.insert(0, 'org.apache.shiro.SecurityUtils.getSubject()') protected_delegation = \ "_%s(%s)" % (name, ', '.join(protected_parameter_names)) protected_parameters = ', '.join(protected_parameters) if self.return_field is not None: protected_delegation = 'return ' + self.return_field.java_validation(value=protected_delegation) return_type_name = self.return_field.type.java_declaration_name() else: return_type_name = 'void' throws = \ lpad( ' throws ', ', '.join(field.type.java_declaration_name() for field in self.throws) ) return """\ @Override%(annotations)s public %(return_type_name)s %(name)s(%(public_parameters)s)%(throws)s {%(validate_method_call)s %(protected_delegation)s; }%(validate_method)s protected abstract %(return_type_name)s _%(name)s(%(protected_parameters)s)%(throws)s; """ % locals()
def _java_method_do_post(self): read_http_servlet_request_body = indent( ' ' * 4, self._java_read_http_servlet_request_body()) function_dispatches = [] if len(self.functions) == 0: function_dispatches = """\ __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(-32601, String.format("the method '%s' does not exist / is not available", messageBegin.getName())), messageBegin.getId()); return; """ else: function_dispatches = \ indent(' ' * 8, ' else '.join( ["""\ if (messageBegin.getName().equals("%s")) { __doPost%s(httpServletRequest, httpServletResponse, iprot, messageBegin.getId()); }""" % (function.name, upper_camelize(function.name)) for function in self.functions ] + ['''\ { __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(-32601, String.format("the method '%s' does not exist / is not available", messageBegin.getName())), messageBegin.getId()); return; }'''] )) return """\ @Override protected void doPost(final javax.servlet.http.HttpServletRequest httpServletRequest, final javax.servlet.http.HttpServletResponse httpServletResponse) throws java.io.IOException, javax.servlet.ServletException { %(read_http_servlet_request_body)s org.thryft.protocol.MessageBegin messageBegin = null; try { final org.thryft.protocol.JsonRpcInputProtocol iprot; try { iprot = new org.thryft.protocol.JsonRpcInputProtocol(new org.thryft.protocol.JacksonJsonInputProtocol(httpServletRequestBody)); messageBegin = iprot.readMessageBegin(); } catch (final org.thryft.protocol.JsonRpcInputProtocolException e) { throw e; } catch (final org.thryft.protocol.InputProtocolException e) { throw new org.thryft.protocol.JsonRpcInputProtocolException(e, -32600); } if (messageBegin.getType() != org.thryft.protocol.MessageType.CALL) { throw new org.thryft.protocol.JsonRpcInputProtocolException(-32600, "expected request"); } %(function_dispatches)s } catch (final org.thryft.protocol.JsonRpcInputProtocolException e) { __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(e), messageBegin != null ? messageBegin.getId() : null); return; } } """ % locals()
def __repr__(self): annotations = rpad("\n".join(self.java_annotations()), "\n") name = self.java_name() request_type_name = self.java_request_type().java_name() service_qname = self.parent.java_qname() upper_camelized_name = upper_camelize(self.name) if len(self.parameters) > 0: read_request = """ final %(service_qname)s.Messages.%(request_type_name)s serviceRequest; try { serviceRequest = new %(service_qname)s.Messages.%(request_type_name)s(iprot, iprot.getCurrentFieldType()); } catch (final IllegalArgumentException | org.thryft.protocol.InputProtocolException | NullPointerException e) { logger.debug("error deserializing service request: ", e); __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(e, -32602, "invalid JSON-RPC request method parameters: " + String.valueOf(e.getMessage())), jsonRpcRequestId); return; } """ % locals() else: read_request = '' parameters = ', '.join([ 'serviceRequest.' + parameter.java_getter_name() + '()' for parameter in self.parameters ]) service_call = "service.%(name)s(%(parameters)s);" % locals() if self.return_field is not None: service_call = 'result = ' + service_call if len(self.throws) > 0: catches = ' '.join([ """\ catch (final %s e) { __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(e, 1, e.getClass().getCanonicalName() + ": " + String.valueOf(e.getMessage())), jsonRpcRequestId); return; }""" % throw.type.java_qname() for throw in self.throws ]) service_call = """\ try { %(service_call)s } %(catches)s """ % locals() service_call = indent(' ' * 4, service_call) return """\ %(annotations)sprivate void __doPost%(upper_camelized_name)s(final javax.servlet.http.HttpServletRequest httpServletRequest, final javax.servlet.http.HttpServletResponse httpServletResponse, final org.thryft.protocol.JsonRpcInputProtocol iprot, final Object jsonRpcRequestId) throws java.io.IOException {%(read_request)s Object result = null; %(service_call)s __doPostResponse(httpServletRequest, httpServletResponse, jsonRpcRequestId, result); } """ % locals()
def __init__(self, *args, **kwds): Include.__init__(self, *args, **kwds) py_module_qname = self.path.replace('/', '.') py_module_qname_split = py_module_qname.rsplit('.', 1) if len(py_module_qname_split) == 2: py_module_qname, py_module_name = py_module_qname_split else: py_module_qname = py_module_name = py_module_qname_split[0] self.__py_class_name = upper_camelize(py_module_name) try: py_module_qname = self.document.namespace_by_scope('py').name + '.' + py_module_name except KeyError: pass self.__py_module_qname = py_module_qname
def _java_method_do_post(self): read_http_servlet_request_body = indent(' ' * 4, self._java_read_http_servlet_request_body()) function_dispatches = [] if len(self.functions) == 0: function_dispatches = """\ __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(-32601, String.format("the method '%s' does not exist / is not available", messageBegin.getName())), messageBegin.getId()); return; """ else: function_dispatches = \ indent(' ' * 8, ' else '.join( ["""\ if (messageBegin.getName().equals("%s")) { __doPost%s(httpServletRequest, httpServletResponse, iprot, messageBegin.getId()); }""" % (function.name, upper_camelize(function.name)) for function in self.functions ] + ['''\ { __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(-32601, String.format("the method '%s' does not exist / is not available", messageBegin.getName())), messageBegin.getId()); return; }'''] )) return """\ @Override protected void doPost(final javax.servlet.http.HttpServletRequest httpServletRequest, final javax.servlet.http.HttpServletResponse httpServletResponse) throws java.io.IOException, javax.servlet.ServletException { %(read_http_servlet_request_body)s org.thryft.protocol.MessageBegin messageBegin = null; try { final org.thryft.protocol.JsonRpcInputProtocol iprot; try { iprot = new org.thryft.protocol.JsonRpcInputProtocol(new org.thryft.protocol.JacksonJsonInputProtocol(httpServletRequestBody)); messageBegin = iprot.readMessageBegin(); } catch (final org.thryft.protocol.JsonRpcInputProtocolException e) { throw e; } catch (final org.thryft.protocol.InputProtocolException e) { throw new org.thryft.protocol.JsonRpcInputProtocolException(e, -32600); } if (messageBegin.getType() != org.thryft.protocol.MessageType.CALL) { throw new org.thryft.protocol.JsonRpcInputProtocolException(-32600, "expected request"); } %(function_dispatches)s } catch (final org.thryft.protocol.JsonRpcInputProtocolException e) { __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(e), messageBegin != null ? messageBegin.getId() : null); return; } } """ % locals()
def __init__(self, parent_function, cpp_suppress_warnings=None): CppStructType.__init__(self, name=upper_camelize(parent_function.name) + 'Response', parent=parent_function.parent) if parent_function.return_field is not None: return_field = parent_function.return_field self.fields.append( return_field.__class__( annotations=return_field.annotations, doc=return_field.doc, name=return_field.name, type=return_field.type, parent=self, required=True))
def __init__(self, *args, **kwds): Include.__init__(self, *args, **kwds) py_module_qname = self.path.replace('/', '.') py_module_qname_split = py_module_qname.rsplit('.', 1) if len(py_module_qname_split) == 2: py_module_qname, py_module_name = py_module_qname_split else: py_module_qname = py_module_name = py_module_qname_split[0] self.__py_class_name = upper_camelize(py_module_name) try: py_module_qname = self.document.namespace_by_scope( 'py').name + '.' + py_module_name except KeyError: pass self.__py_module_qname = py_module_qname
def java_definitions(self): annotations = lpad("\n", "\n".join(self.java_annotations())) name = self.java_name() public_parameters = \ ', '.join(parameter.java_parameter(final=True) for parameter in self.parameters) public_parameter_names = ', '.join(parameter.java_name() for parameter in self.parameters) parameter_validations = [] request_type_name = self.java_request_type().java_name() service_qname = JavaService.java_qname(self.parent) for parameter in self.parameters: parameter_name = parameter.java_name() parameter_validate_method_name = parameter.java_validate_method_name() parameter_validations.append("%(service_qname)s.Messages.%(request_type_name)s.DefaultConstructionValidator.getInstance().%(parameter_validate_method_name)s(%(parameter_name)s);" % locals()) if len(parameter_validations) > 0: parameter_validations = \ "\n".join(indent(' ' * 4, parameter_validations)) validate_method_name = '_validate' + upper_camelize(self.name) + 'Parameters' validate_method = lpad("\n\n", """\ protected void %(validate_method_name)s(%(public_parameters)s) { %(parameter_validations)s }""" % locals()) validate_method_call = lpad("\n", indent(' ' * 4, "%s(%s);" % (validate_method_name, public_parameter_names))) else: validate_method = validate_method_call = '' delegation = \ "delegate.%s(%s)" % (name, ', '.join(parameter.java_name() for parameter in self.parameters)) if self.return_field is not None: response_type_name = self.java_response_type().java_name() return_field_validate_method_name = self.return_field.java_validate_method_name() delegation = "return %(service_qname)s.Messages.%(response_type_name)s.DefaultConstructionValidator.getInstance().%(return_field_validate_method_name)s(%(delegation)s)" % locals() return_type_name = self.return_field.type.java_qname() else: return_type_name = 'void' throws = \ lpad( ' throws ', ', '.join(field.type.java_qname() for field in self.throws) ) return ["""\ @Override%(annotations)s public final %(return_type_name)s %(name)s(%(public_parameters)s)%(throws)s {%(validate_method_call)s %(delegation)s; }%(validate_method)s """ % locals()] + self._java_delegating_definitions()
def __repr__(self): annotations = rpad("\n".join(self.java_annotations()), "\n") name = self.java_name() request_type_name = self.java_request_type().java_name() service_qname = self.parent.java_qname() upper_camelized_name = upper_camelize(self.name) if len(self.parameters) > 0: read_request = """ final %(service_qname)s.Messages.%(request_type_name)s serviceRequest; try { serviceRequest = new %(service_qname)s.Messages.%(request_type_name)s(iprot, iprot.getCurrentFieldType()); } catch (final IllegalArgumentException | org.thryft.protocol.InputProtocolException | NullPointerException e) { logger.debug("error deserializing service request: ", e); __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(e, -32602, "invalid JSON-RPC request method parameters: " + String.valueOf(e.getMessage())), jsonRpcRequestId); return; } """ % locals() else: read_request = '' parameters = ', '.join(['serviceRequest.' + parameter.java_getter_name() + '()' for parameter in self.parameters]) service_call = "service.%(name)s(%(parameters)s);" % locals() if self.return_field is not None: service_call = 'result = ' + service_call if len(self.throws) > 0: catches = ' '.join(["""\ catch (final %s e) { __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(e, 1, e.getClass().getCanonicalName() + ": " + String.valueOf(e.getMessage())), jsonRpcRequestId); return; }""" % throw.type.java_qname() for throw in self.throws]) service_call = """\ try { %(service_call)s } %(catches)s """ % locals() service_call = indent(' ' * 4, service_call) return """\ %(annotations)sprivate void __doPost%(upper_camelized_name)s(final javax.servlet.http.HttpServletRequest httpServletRequest, final javax.servlet.http.HttpServletResponse httpServletResponse, final org.thryft.protocol.JsonRpcInputProtocol iprot, final Object jsonRpcRequestId) throws java.io.IOException {%(read_request)s Object result = null; %(service_call)s __doPostResponse(httpServletRequest, httpServletResponse, jsonRpcRequestId, result); } """ % locals()
def __init__(self, parent_function): PyFunction._PyMessageType.__init__( self, name=upper_camelize(parent_function.name) + 'Request', parent=parent_function.parent ) for parameter in parent_function.parameters: self.fields.append( parameter.__class__( annotations=parameter.annotations, doc=parameter.doc, name=parameter.name, type=parameter.type, parent=self, required=parameter.required, ) )
def __init__(self, *args, **kwds): Include.__init__(self, *args, **kwds) java_class_qname = self.relpath.rsplit('.', 1)[0].replace('/', '.') java_class_qname_split = java_class_qname.rsplit('.', 1) java_class_name = upper_camelize(java_class_qname_split.pop(-1)) java_package = self.document.java_package() if java_package is None: if len(java_class_qname_split) > 0: java_package = java_class_qname_split[0] else: java_package = '' self.__java_class_name = java_class_name self.__java_package = java_package
def _java_method_unset(self): if len(self.fields) == 0: return { 'unset': """\ public Builder unset(final String fieldThriftName) { throw new IllegalArgumentException(); } public Builder unset(final org.thryft.Struct.FieldMetadata fieldMetadata) { throw new IllegalArgumentException(); }""" } cases = [] for field in self.fields: field_name_upper = field.name.upper() field_name_upper_camelized = upper_camelize(field.name) cases.append( 'case %(field_name_upper)s: return unset%(field_name_upper_camelized)s();' % locals()) cases = lpad("\n", "\n".join(indent(' ' * 4, cases))) return { 'unset': """\ public Builder unset(final String fieldThriftName) { return unset(FieldMetadata.valueOfThriftName(fieldThriftName)); } public Builder unset(final org.thryft.Struct.FieldMetadata fieldMetadata) { if (!(fieldMetadata instanceof FieldMetadata)) { throw new IllegalArgumentException(); } return unset((FieldMetadata)fieldMetadata); } public Builder unset(final FieldMetadata fieldMetadata) { com.google.common.base.Preconditions.checkNotNull(fieldMetadata); switch (fieldMetadata) {%(cases)s default: throw new IllegalStateException(); } }""" % locals() }
def __init__(self, parent_function, cpp_suppress_warnings=None): CppStructType.__init__( self, name=upper_camelize(parent_function.name) + 'Response', parent=parent_function.parent ) if parent_function.return_field is not None: return_field = parent_function.return_field self.fields.append( return_field.__class__( annotations=return_field.annotations, doc=return_field.doc, name=return_field.name, type=return_field.type, parent=self, required=True ) )
def __init__(self, parent_function, cpp_suppress_warnings=None, parameters=None): CppStructType.__init__( self, name=upper_camelize(parent_function.name) + 'Request', parent=parent_function.parent ) self.__parent_function = parent_function if parameters is None: parameters = parent_function.parameters for parameter in parameters: self.fields.append( parameter.__class__( annotations=parameter.annotations, doc=parameter.doc, name=parameter.name, type=parameter.type, parent=self, required=parameter.required, ) )
def __init__(self, parent_function, java_suppress_warnings=None, parameters=None): JavaFunction._JavaMessageType.__init__( self, java_class_modifiers='public final static', java_suppress_warnings=java_suppress_warnings, name=upper_camelize(parent_function.name) + 'Request', parent=parent_function.parent ) if parameters is None: parameters = parent_function.parameters for parameter in parameters: self.fields.append( parameter.__class__( annotations=parameter.annotations, doc=parameter.doc, name=parameter.name, type=parameter.type, parent=self, required=parameter.required, ) )
def __init__(self, parent_function, cpp_suppress_warnings=None, parameters=None): CppStructType.__init__(self, name=upper_camelize(parent_function.name) + 'Request', parent=parent_function.parent) self.__parent_function = parent_function if parameters is None: parameters = parent_function.parameters for parameter in parameters: self.fields.append( parameter.__class__( annotations=parameter.annotations, doc=parameter.doc, name=parameter.name, type=parameter.type, parent=self, required=parameter.required, ))
def __init__(self, parent_function, java_suppress_warnings=None, parameters=None): JavaStructType.__init__( self, java_class_modifiers='public final static', java_suppress_warnings=java_suppress_warnings, name=upper_camelize(parent_function.name) + 'Request', parent=parent_function.parent ) if parameters is None: parameters = parent_function.parameters for parameter in parameters: self.fields.append( parameter.__class__( annotations=parameter.annotations, doc=parameter.doc, name=parameter.name, type=parameter.type, parent=self, required=parameter.required, ) )
def __construct(self, class_name, annotation_nodes=None, **kwds): if len(self.__scope_stack) > 0: parent = self.__scope_stack[-1] else: parent = self.__generator kwds['parent'] = parent construct_class = getattr(self.__generator, class_name) if annotation_nodes is not None and len(annotation_nodes) > 0: annotations = [] for annotation_node in annotation_nodes: try: annotation_class_name = upper_camelize(annotation_node.name) + 'Annotation' annotation_class = getattr(construct_class, annotation_class_name) except AttributeError: annotation_class = getattr(construct_class, 'Annotation') annotations.append( annotation_class( name=annotation_node.name, value=annotation_node.value ) ) kwds['annotations'] = tuple(annotations) return construct_class(**kwds)
def cpp_sync_handler(self): name = self.cpp_name() response_name = upper_camelize( self.__parent_function.cpp_name()) + 'Response' if self.__parent_function.return_field is not None: call_prefix = "request.respond(%(response_name)s(" % locals() call_suffix = "))" else: call_prefix = '' call_suffix = """; request.respond(*new %(response_name)s())""" % locals() call_parameters = \ ', '.join("request.%s()" % parameter.cpp_getter_name() for parameter in self.fields) call_method_name = self.__parent_function.name call = "%(call_prefix)simpl_.%(call_method_name)s(%(call_parameters)s)%(call_suffix)s;" % locals( ) if len(self.__parent_function.throws) > 0: catches = [] for exception in self.__parent_function.throws: exception_name = exception.cpp_name() exception_type_qname = exception.type.cpp_qname() catches.append("""\ } catch (const %(exception_type_qname)s<ExceptionT>& %(exception_name)s) { request.respond(%(exception_name)s); }""" % locals()) catches = "\n".join(catches) call = indent(' ' * 2, call) call = """\ try { %(call)s %(catches)s""" % locals() call = indent(' ' * 2, call) return """\ virtual void handle(const %(name)s& request) { %(call)s }""" % locals()
def _java_method_unset(self): if len(self.fields) == 0: return {'unset': """\ public Builder unset(final String fieldThriftName) { throw new IllegalArgumentException(); } public Builder unset(final org.thryft.Struct.FieldMetadata fieldMetadata) { throw new IllegalArgumentException(); }"""} cases = [] for field in self.fields: field_name_upper = field.name.upper() field_name_upper_camelized = upper_camelize(field.name) cases.append('case %(field_name_upper)s: return unset%(field_name_upper_camelized)s();' % locals()) cases = lpad("\n", "\n".join(indent(' ' * 4, cases))) return {'unset': """\ public Builder unset(final String fieldThriftName) { return unset(FieldMetadata.valueOfThriftName(fieldThriftName)); } public Builder unset(final org.thryft.Struct.FieldMetadata fieldMetadata) { if (!(fieldMetadata instanceof FieldMetadata)) { throw new IllegalArgumentException(); } return unset((FieldMetadata)fieldMetadata); } public Builder unset(final FieldMetadata fieldMetadata) { com.google.common.base.Preconditions.checkNotNull(fieldMetadata); switch (fieldMetadata) {%(cases)s default: throw new IllegalStateException(); } }""" % locals()}
def dart_name(self): return upper_camelize(self.name)
def java_validate_method_name(self): return 'validate' + upper_camelize(self.name)
def java_setter_name(self): return 'set' + upper_camelize(self.name)
def java_name(self): return 'test' + upper_camelize(self.name)
def java_definition(self): annotations = rpad("\n".join(self.java_annotations()), "\n") name = self.java_name() request_type_name = self.java_request_type().java_name() service_qname = self.parent.java_qname() upper_camelized_name = upper_camelize(self.name) if len(self.parameters) > 0: read_request = """ final %(service_qname)s.Messages.%(request_type_name)s serviceRequest; try { serviceRequest = %(service_qname)s.Messages.%(request_type_name)s.readAs(iprot, iprot.getCurrentFieldType(), unknownFieldCallback); } catch (final IllegalArgumentException | org.thryft.protocol.InputProtocolException | NullPointerException e) { logger.debug("error deserializing service request: ", e); __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(e, -32602, "invalid JSON-RPC request method parameters: " + String.valueOf(e.getMessage())), jsonRpcRequestId); return; } """ % locals() else: read_request = '' parameters = ', '.join([ 'serviceRequest.' + parameter.java_getter_name() + '()' for parameter in self.parameters ]) service_call = "service.%(name)s(%(parameters)s);" % locals() if self.return_field is not None: result_declaration = " final %s result;\n" % self.return_field.type.java_qname( ) service_call = 'result = ' + service_call write_result = self.return_field.type.java_write_protocol( value='result') else: result_declaration = '' write_result = '''\ oprot.writeStructBegin("response"); oprot.writeStructEnd(); ''' write_result = indent(' ' * 12, write_result) if len(self.throws) > 0: catches = ' '.join([ """\ catch (final %s e) { __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(e, 1, e.getClass().getCanonicalName() + ": " + String.valueOf(e.getMessage())), jsonRpcRequestId); return; }""" % throw.type.java_qname() for throw in self.throws ]) service_call = """\ try { %(service_call)s } %(catches)s """ % locals() service_call = indent(' ' * 4, service_call) return """\ %(annotations)spublic void doPost%(upper_camelized_name)s(final javax.servlet.http.HttpServletRequest httpServletRequest, final javax.servlet.http.HttpServletResponse httpServletResponse, final org.thryft.protocol.JsonRpcInputProtocol iprot, final Object jsonRpcRequestId) throws java.io.IOException {%(read_request)s %(result_declaration)s%(service_call)s final String httpServletResponseBody; { final java.io.StringWriter httpServletResponseBodyWriter = new java.io.StringWriter(); try { final org.thryft.protocol.JsonRpcOutputProtocol oprot = new org.thryft.protocol.JsonRpcOutputProtocol(new org.thryft.protocol.JacksonJsonOutputProtocol(httpServletResponseBodyWriter)); oprot.writeMessageBegin("", org.thryft.protocol.MessageType.REPLY, jsonRpcRequestId); %(write_result)s oprot.writeMessageEnd(); oprot.flush(); } catch (final org.thryft.protocol.OutputProtocolException e) { logger.error("error serializing service error response: ", e); throw new IllegalStateException(e); } httpServletResponseBody = httpServletResponseBodyWriter.toString(); } __doPostResponse(httpServletRequest, httpServletResponse, httpServletResponseBody); } """ % locals()
def java_definition(self): annotations = rpad("\n".join(self.java_annotations()), "\n") name = self.java_name() request_type_name = self.java_request_type().java_name() service_qname = self.parent.java_qname() upper_camelized_name = upper_camelize(self.name) if len(self.parameters) > 0: read_request = """ final %(service_qname)s.Messages.%(request_type_name)s serviceRequest; try { serviceRequest = %(service_qname)s.Messages.%(request_type_name)s.readAs(iprot, iprot.getCurrentFieldType(), unknownFieldCallback); } catch (final IllegalArgumentException | org.thryft.protocol.InputProtocolException | NullPointerException e) { logger.debug("error deserializing service request: ", e); __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(e, -32602, "invalid JSON-RPC request method parameters: " + String.valueOf(e.getMessage())), jsonRpcRequestId); return; } """ % locals() else: read_request = '' parameters = ', '.join(['serviceRequest.' + parameter.java_getter_name() + '()' for parameter in self.parameters]) service_call = "service.%(name)s(%(parameters)s);" % locals() if self.return_field is not None: result_declaration = " final %s result;\n" % self.return_field.type.java_qname() service_call = 'result = ' + service_call write_result = self.return_field.type.java_write_protocol(value='result') else: result_declaration = '' write_result = '''\ oprot.writeStructBegin("response"); oprot.writeStructEnd(); ''' write_result = indent(' ' * 12, write_result) if len(self.throws) > 0: catches = ' '.join(["""\ catch (final %s e) { __doPostError(httpServletRequest, httpServletResponse, new org.thryft.protocol.JsonRpcErrorResponse(e, 1, e.getClass().getCanonicalName() + ": " + String.valueOf(e.getMessage())), jsonRpcRequestId); return; }""" % throw.type.java_qname() for throw in self.throws]) service_call = """\ try { %(service_call)s } %(catches)s """ % locals() service_call = indent(' ' * 4, service_call) return """\ %(annotations)spublic void doPost%(upper_camelized_name)s(final javax.servlet.http.HttpServletRequest httpServletRequest, final javax.servlet.http.HttpServletResponse httpServletResponse, final org.thryft.protocol.JsonRpcInputProtocol iprot, final Object jsonRpcRequestId) throws java.io.IOException {%(read_request)s %(result_declaration)s%(service_call)s final String httpServletResponseBody; { final java.io.StringWriter httpServletResponseBodyWriter = new java.io.StringWriter(); try { final org.thryft.protocol.JsonRpcOutputProtocol oprot = new org.thryft.protocol.JsonRpcOutputProtocol(new org.thryft.protocol.JacksonJsonOutputProtocol(httpServletResponseBodyWriter)); oprot.writeMessageBegin("", org.thryft.protocol.MessageType.REPLY, jsonRpcRequestId); %(write_result)s oprot.writeMessageEnd(); oprot.flush(); } catch (final org.thryft.protocol.OutputProtocolException e) { logger.error("error serializing service error response: ", e); throw new IllegalStateException(e); } httpServletResponseBody = httpServletResponseBodyWriter.toString(); } __doPostResponse(httpServletRequest, httpServletResponse, httpServletResponseBody); } """ % locals()
def js_write_protocol(self, value, depth=0): name = upper_camelize(getattr(self, 'name')) return "oprot.write%(name)s(%(value)s);" % locals()
def js_read_protocol(self): name = upper_camelize(getattr(self, 'name')) return "iprot.read%(name)s()" % locals()
try: import yutil except ImportError: sys.path.append(os.path.abspath(os.path.join(MY_DIR_PATH, '..', 'src'))) from yutil import upper_camelize argument_parser = argparse.ArgumentParser() argument_parser.add_argument('--overwrite', action='store_true') argument_parser.add_argument("language", nargs=1) args = argument_parser.parse_args() language = args.language[0] language_upper_camelized = upper_camelize(language) files = {} files['__init__.py'] = '' files["_%(language)s_base_type.py" % locals()] = """\ from thryft.generators.%(language)s._%(language)s_type import _%(language_upper_camelized)sType class _%(language_upper_camelized)sBaseType(_%(language_upper_camelized)sType): pass """ % locals()
def java_getter_name_static(field): return 'get' + upper_camelize(field.name)
MY_DIR_PATH = os.path.abspath(os.path.dirname(__file__)) try: import yutil except ImportError: sys.path.append(os.path.abspath(os.path.join(MY_DIR_PATH, '..', 'src'))) from yutil import upper_camelize argument_parser = argparse.ArgumentParser() argument_parser.add_argument('--overwrite', action='store_true') argument_parser.add_argument("language", nargs=1) args = argument_parser.parse_args() language = args.language[0] language_upper_camelized = upper_camelize(language) files = {} files['__init__.py'] = '' files["_%(language)s_base_type.py" % locals()] = """\ from thryft.generators.%(language)s._%(language)s_type import _%(language_upper_camelized)sType class _%(language_upper_camelized)sBaseType(_%(language_upper_camelized)sType): pass """ % locals() files["_%(language)s_compound_type.py" % locals()] = """\ from thryft.generators.%(language)s._%(language)s_type import _%(language_upper_camelized)sType
def java_unsetter_name(self): return 'unset' + upper_camelize(self.name)
def __repr__(self): annotations = self.java_annotations() name = '__do' + self.java_name()[0].upper() + self.java_name()[1:] sections = [] variable_declarations = [] for parameter in self.parameters: variable_declarations.append( parameter.java_local_declaration(final=False)) if self.return_field is not None: variable_declarations.append( self.return_field.type.java_declaration_name() + " __return_value;") if len(variable_declarations) > 0: sections.append("\n".join( indent(' ' * 4, variable_declarations))) read_request = [] if len(self.parameters) > 0: path_parameter = self.java_rest_path_parameter() if path_parameter is None or len(self.parameters) > 1: request_type_name = 'Messages.' + upper_camelize( self.name) + 'Request' else: request_type_name = None if self.java_rest_request_method() in ('POST', 'PUT'): read_http_servlet_request_body = self._java_read_http_servlet_request_body( variable_name_prefix='__') read_request.append("""\ %(read_http_servlet_request_body)s final org.thryft.protocol.InputProtocol __restRequestProtocol = new org.thryft.protocol.JacksonJsonInputProtocol(new java.io.StringReader(__httpServletRequestBody)); """ % locals()) else: if path_parameter is not None: path_info_prefix = self.java_rest_path_prefix() path_info_prefix_len = len(path_info_prefix) path_parameter_name = path_parameter.java_name() path_parameter_from_string = path_parameter.type.java_from_string( "java.net.URLDecoder.decode(__httpServletRequest.getPathInfo().substring(%(path_info_prefix_len)u), \"UTF-8\")" % locals()) read_request.append("""\ if (__httpServletRequest.getPathInfo().length() > %(path_info_prefix_len)u) { %(path_parameter_name)s = %(path_parameter_from_string)s; } else { __httpServletResponse.sendError(404); return; } """ % locals()) if path_parameter is None or len(self.parameters) > 1: annotations.append('@SuppressWarnings("unchecked")') read_request.append("""\ java.util.Map<String, String> __restRequestParameterStringMap = new java.util.LinkedHashMap<String, String>(); for (final java.util.Map.Entry<String, String[]> __httpServletRequestParameter : ((java.util.Map<String, String[]>)__httpServletRequest.getParameterMap()).entrySet()) { __restRequestParameterStringMap.put(__httpServletRequestParameter.getKey(), __httpServletRequestParameter.getValue()[0]); } final org.thryft.protocol.InputProtocol __restRequestProtocol = new org.thryft.protocol.StringMapInputProtocol(__restRequestParameterStringMap); """ % locals()) if request_type_name is not None: variable_assignments = [] for parameter in self.parameters: if parameter is path_parameter: continue variable_assignments.append( parameter.java_name() + ' = __serviceRequest.' + parameter.java_getter_name() + '();') variable_assignments = "\n".join( indent(' ' * 4, variable_assignments)) read_request.append("""\ try { final %(request_type_name)s __serviceRequest = new %(request_type_name)s(__restRequestProtocol); %(variable_assignments)s } catch (final IllegalArgumentException e) { logger.debug("error deserializing service request: ", e); __httpServletResponse.sendError(400); return; } catch (final NullPointerException e) { logger.debug("error deserializing service request: ", e); __httpServletResponse.sendError(400); return; } catch (final org.thryft.protocol.InputProtocolException e) { logger.debug("error deserializing service request: ", e); __httpServletResponse.sendError(400); return; } """ % locals()) if len(read_request) > 0: sections.append("\n".join(indent(' ' * 4, read_request))) service_call = \ "service.%s(%s);" % ( _servlet_java_generator._ServletJavaGenerator._Function.java_name(self), ', '.join([parameter.java_name() for parameter in self.parameters]) ) if self.return_field is not None: service_call = '__return_value = ' + service_call if len(self.throws) > 0: catches = ' '.join([ """\ catch (final %s e) { final java.io.StringWriter __httpServletResponseBodyWriter = new java.io.StringWriter(); final org.thryft.protocol.OutputProtocol __oprot = new org.thryft.protocol.JacksonJsonOutputProtocol(__httpServletResponseBodyWriter); try { e.write(__oprot); __oprot.flush(); } catch (final org.thryft.protocol.OutputProtocolException e1) { logger.error("error serializing service error response: ", e1); __httpServletResponse.sendError(500); return; } final String __httpServletResponseBody = __httpServletResponseBodyWriter.toString(); __httpServletResponse.getWriter().write(__httpServletResponseBody); __httpServletResponse.setHeader("Content-Type", "application/json"); __httpServletResponse.setHeader("Warning", e.getClass().getName()); __httpServletResponse.setStatus(404); return; }""" % throw.type.java_qname() for throw in self.throws ]) service_call = """\ try { %(service_call)s } %(catches)s """ % locals() sections.append(indent(' ' * 4, service_call)) if self.return_field is None: write_response = """\ __httpServletResponse.setStatus(204);""" elif isinstance(self.return_field.type, JavaBoolType): # assert self.java_rest_request_method() in ('DELETE', 'HEAD'), self.java_rest_request_method() write_response = """\ if (__return_value) { __httpServletResponse.setStatus(204); } else { __httpServletResponse.setStatus(404); }""" % locals() else: return_write = \ indent(' ' * 8, self.return_field.type.java_write_protocol('__return_value')) if isinstance(self.return_field.type, _JavaBaseType): return_ttype_id = self.return_field.type.thrift_ttype_id() return_write = """\ oprot.writeListBegin(new org.thryft.protocol.TList((byte)%(return_ttype_id)u, 1)); %(return_write)s oprot.writeListEnd();""" % locals() write_http_servlet_response_body = indent( ' ' * 4, self._java_write_http_servlet_response_body( variable_name_prefix='__')) write_response = """\ final java.io.StringWriter __httpServletResponseBodyWriter = new java.io.StringWriter(); final org.thryft.protocol.OutputProtocol oprot = new org.thryft.protocol.JacksonJsonOutputProtocol(__httpServletResponseBodyWriter); try { %(return_write)s oprot.flush(); } catch (final org.thryft.protocol.OutputProtocolException e) { logger.error("error serializing service response: ", e); __httpServletResponse.sendError(500); return; } String __httpServletResponseBody = __httpServletResponseBodyWriter.toString(); __httpServletResponse.setStatus(200); %(write_http_servlet_response_body)s """ % locals() sections.append(write_response) annotations = rpad("\n".join(annotations), "\n") sections = "\n\n".join(sections) return """\ %(annotations)sprivate void %(name)s(final javax.servlet.http.HttpServletRequest __httpServletRequest, final javax.servlet.http.HttpServletResponse __httpServletResponse) throws java.io.IOException, javax.servlet.ServletException { %(sections)s } """ % locals()
def __repr__(self): annotations = self.java_annotations() name = '__do' + self.java_name()[0].upper() + self.java_name()[1:] sections = [] variable_declarations = [] for parameter in self.parameters: variable_declarations.append(parameter.java_local_declaration(final=False)) if self.return_field is not None: variable_declarations.append(self.return_field.type.java_declaration_name() + " __return_value;") if len(variable_declarations) > 0: sections.append("\n".join(indent(' ' * 4, variable_declarations))) read_request = [] if len(self.parameters) > 0: path_parameter = self.java_rest_path_parameter() if path_parameter is None or len(self.parameters) > 1: request_type_name = 'Messages.' + upper_camelize(self.name) + 'Request' else: request_type_name = None if self.java_rest_request_method() in ('POST', 'PUT'): read_http_servlet_request_body = self._java_read_http_servlet_request_body(variable_name_prefix='__') read_request.append("""\ %(read_http_servlet_request_body)s final org.thryft.protocol.InputProtocol __restRequestProtocol = new org.thryft.protocol.JacksonJsonInputProtocol(new java.io.StringReader(__httpServletRequestBody)); """ % locals()) else: if path_parameter is not None: path_info_prefix = self.java_rest_path_prefix() path_info_prefix_len = len(path_info_prefix) path_parameter_name = path_parameter.java_name() path_parameter_from_string = path_parameter.type.java_from_string("java.net.URLDecoder.decode(__httpServletRequest.getPathInfo().substring(%(path_info_prefix_len)u), \"UTF-8\")" % locals()) read_request.append("""\ if (__httpServletRequest.getPathInfo().length() > %(path_info_prefix_len)u) { %(path_parameter_name)s = %(path_parameter_from_string)s; } else { __httpServletResponse.sendError(404); return; } """ % locals()) if path_parameter is None or len(self.parameters) > 1: annotations.append('@SuppressWarnings("unchecked")') read_request.append("""\ java.util.Map<String, String> __restRequestParameterStringMap = new java.util.LinkedHashMap<String, String>(); for (final java.util.Map.Entry<String, String[]> __httpServletRequestParameter : ((java.util.Map<String, String[]>)__httpServletRequest.getParameterMap()).entrySet()) { __restRequestParameterStringMap.put(__httpServletRequestParameter.getKey(), __httpServletRequestParameter.getValue()[0]); } final org.thryft.protocol.InputProtocol __restRequestProtocol = new org.thryft.protocol.StringMapInputProtocol(__restRequestParameterStringMap); """ % locals()) if request_type_name is not None: variable_assignments = [] for parameter in self.parameters: if parameter is path_parameter: continue variable_assignments.append(parameter.java_name() + ' = __serviceRequest.' + parameter.java_getter_name() + '();') variable_assignments = "\n".join(indent(' ' * 4, variable_assignments)) read_request.append("""\ try { final %(request_type_name)s __serviceRequest = new %(request_type_name)s(__restRequestProtocol); %(variable_assignments)s } catch (final IllegalArgumentException e) { logger.debug("error deserializing service request: ", e); __httpServletResponse.sendError(400); return; } catch (final NullPointerException e) { logger.debug("error deserializing service request: ", e); __httpServletResponse.sendError(400); return; } catch (final org.thryft.protocol.InputProtocolException e) { logger.debug("error deserializing service request: ", e); __httpServletResponse.sendError(400); return; } """ % locals()) if len(read_request) > 0: sections.append("\n".join(indent(' ' * 4, read_request))) service_call = \ "service.%s(%s);" % ( _servlet_java_generator._ServletJavaGenerator._Function.java_name(self), ', '.join([parameter.java_name() for parameter in self.parameters]) ) if self.return_field is not None: service_call = '__return_value = ' + service_call if len(self.throws) > 0: catches = ' '.join(["""\ catch (final %s e) { final java.io.StringWriter __httpServletResponseBodyWriter = new java.io.StringWriter(); final org.thryft.protocol.OutputProtocol __oprot = new org.thryft.protocol.JacksonJsonOutputProtocol(__httpServletResponseBodyWriter); try { e.write(__oprot); __oprot.flush(); } catch (final org.thryft.protocol.OutputProtocolException e1) { logger.error("error serializing service error response: ", e1); __httpServletResponse.sendError(500); return; } final String __httpServletResponseBody = __httpServletResponseBodyWriter.toString(); __httpServletResponse.getWriter().write(__httpServletResponseBody); __httpServletResponse.setHeader("Content-Type", "application/json"); __httpServletResponse.setHeader("Warning", e.getClass().getName()); __httpServletResponse.setStatus(404); return; }""" % throw.type.java_qname() for throw in self.throws]) service_call = """\ try { %(service_call)s } %(catches)s """ % locals() sections.append(indent(' ' * 4, service_call)) if self.return_field is None: write_response = """\ __httpServletResponse.setStatus(204);""" elif isinstance(self.return_field.type, JavaBoolType): # assert self.java_rest_request_method() in ('DELETE', 'HEAD'), self.java_rest_request_method() write_response = """\ if (__return_value) { __httpServletResponse.setStatus(204); } else { __httpServletResponse.setStatus(404); }""" % locals() else: return_write = \ indent(' ' * 8, self.return_field.type.java_write_protocol('__return_value')) if isinstance(self.return_field.type, _JavaBaseType): return_ttype_id = self.return_field.type.thrift_ttype_id() return_write = """\ oprot.writeListBegin(new org.thryft.protocol.TList((byte)%(return_ttype_id)u, 1)); %(return_write)s oprot.writeListEnd();""" % locals() write_http_servlet_response_body = indent(' ' * 4, self._java_write_http_servlet_response_body(variable_name_prefix='__')) write_response = """\ final java.io.StringWriter __httpServletResponseBodyWriter = new java.io.StringWriter(); final org.thryft.protocol.OutputProtocol oprot = new org.thryft.protocol.JacksonJsonOutputProtocol(__httpServletResponseBodyWriter); try { %(return_write)s oprot.flush(); } catch (final org.thryft.protocol.OutputProtocolException e) { logger.error("error serializing service response: ", e); __httpServletResponse.sendError(500); return; } String __httpServletResponseBody = __httpServletResponseBodyWriter.toString(); __httpServletResponse.setStatus(200); %(write_http_servlet_response_body)s """ % locals() sections.append(write_response) annotations = rpad("\n".join(annotations), "\n") sections = "\n\n".join(sections) return """\ %(annotations)sprivate void %(name)s(final javax.servlet.http.HttpServletRequest __httpServletRequest, final javax.servlet.http.HttpServletResponse __httpServletResponse) throws java.io.IOException, javax.servlet.ServletException { %(sections)s } """ % locals()