Formatted code
Added Eclipse formatter and cleanup configuration
This commit is contained in:
parent
a482dcb959
commit
12fa5bbab6
26 changed files with 1913 additions and 1491 deletions
56
cleanup.xml
Normal file
56
cleanup.xml
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<profiles version="2">
|
||||||
|
<profile kind="CleanUpProfile" name="ROME" version="2">
|
||||||
|
<setting id="cleanup.remove_unused_private_fields" value="true"/>
|
||||||
|
<setting id="cleanup.always_use_parentheses_in_expressions" value="false"/>
|
||||||
|
<setting id="cleanup.never_use_blocks" value="false"/>
|
||||||
|
<setting id="cleanup.remove_unused_private_methods" value="true"/>
|
||||||
|
<setting id="cleanup.add_missing_deprecated_annotations" value="true"/>
|
||||||
|
<setting id="cleanup.convert_to_enhanced_for_loop" value="true"/>
|
||||||
|
<setting id="cleanup.remove_unnecessary_nls_tags" value="true"/>
|
||||||
|
<setting id="cleanup.sort_members" value="false"/>
|
||||||
|
<setting id="cleanup.remove_unused_local_variables" value="false"/>
|
||||||
|
<setting id="cleanup.never_use_parentheses_in_expressions" value="true"/>
|
||||||
|
<setting id="cleanup.remove_unused_private_members" value="false"/>
|
||||||
|
<setting id="cleanup.remove_unnecessary_casts" value="true"/>
|
||||||
|
<setting id="cleanup.make_parameters_final" value="true"/>
|
||||||
|
<setting id="cleanup.use_this_for_non_static_field_access" value="true"/>
|
||||||
|
<setting id="cleanup.remove_private_constructors" value="true"/>
|
||||||
|
<setting id="cleanup.use_blocks" value="true"/>
|
||||||
|
<setting id="cleanup.always_use_this_for_non_static_method_access" value="false"/>
|
||||||
|
<setting id="cleanup.remove_trailing_whitespaces_all" value="true"/>
|
||||||
|
<setting id="cleanup.always_use_this_for_non_static_field_access" value="false"/>
|
||||||
|
<setting id="cleanup.use_this_for_non_static_field_access_only_if_necessary" value="true"/>
|
||||||
|
<setting id="cleanup.add_default_serial_version_id" value="true"/>
|
||||||
|
<setting id="cleanup.make_type_abstract_if_missing_method" value="false"/>
|
||||||
|
<setting id="cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class" value="true"/>
|
||||||
|
<setting id="cleanup.make_variable_declarations_final" value="true"/>
|
||||||
|
<setting id="cleanup.add_missing_nls_tags" value="false"/>
|
||||||
|
<setting id="cleanup.format_source_code" value="true"/>
|
||||||
|
<setting id="cleanup.qualify_static_method_accesses_with_declaring_class" value="false"/>
|
||||||
|
<setting id="cleanup.add_missing_override_annotations" value="true"/>
|
||||||
|
<setting id="cleanup.remove_unused_private_types" value="true"/>
|
||||||
|
<setting id="cleanup.add_missing_methods" value="false"/>
|
||||||
|
<setting id="cleanup.make_local_variable_final" value="true"/>
|
||||||
|
<setting id="cleanup.correct_indentation" value="true"/>
|
||||||
|
<setting id="cleanup.add_missing_override_annotations_interface_methods" value="true"/>
|
||||||
|
<setting id="cleanup.remove_unused_imports" value="true"/>
|
||||||
|
<setting id="cleanup.remove_trailing_whitespaces_ignore_empty" value="false"/>
|
||||||
|
<setting id="cleanup.make_private_fields_final" value="true"/>
|
||||||
|
<setting id="cleanup.add_generated_serial_version_id" value="false"/>
|
||||||
|
<setting id="cleanup.organize_imports" value="true"/>
|
||||||
|
<setting id="cleanup.remove_trailing_whitespaces" value="true"/>
|
||||||
|
<setting id="cleanup.sort_members_all" value="false"/>
|
||||||
|
<setting id="cleanup.use_blocks_only_for_return_and_throw" value="false"/>
|
||||||
|
<setting id="cleanup.add_missing_annotations" value="true"/>
|
||||||
|
<setting id="cleanup.use_parentheses_in_expressions" value="true"/>
|
||||||
|
<setting id="cleanup.qualify_static_field_accesses_with_declaring_class" value="false"/>
|
||||||
|
<setting id="cleanup.use_this_for_non_static_method_access_only_if_necessary" value="true"/>
|
||||||
|
<setting id="cleanup.use_this_for_non_static_method_access" value="true"/>
|
||||||
|
<setting id="cleanup.qualify_static_member_accesses_through_instances_with_declaring_class" value="true"/>
|
||||||
|
<setting id="cleanup.add_serial_version_id" value="false"/>
|
||||||
|
<setting id="cleanup.format_source_code_changes_only" value="false"/>
|
||||||
|
<setting id="cleanup.qualify_static_member_accesses_with_declaring_class" value="true"/>
|
||||||
|
<setting id="cleanup.always_use_blocks" value="true"/>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
291
formatter.xml
Normal file
291
formatter.xml
Normal file
|
@ -0,0 +1,291 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<profiles version="12">
|
||||||
|
<profile kind="CodeFormatterProfile" name="ROME" version="12">
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.compiler.source" value="1.7"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="160"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.7"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.7"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
|
@ -16,22 +16,21 @@
|
||||||
*/
|
*/
|
||||||
package org.rometools.fetcher;
|
package org.rometools.fetcher;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
import com.sun.syndication.feed.synd.SyndFeed;
|
import com.sun.syndication.feed.synd.SyndFeed;
|
||||||
import com.sun.syndication.io.FeedException;
|
import com.sun.syndication.io.FeedException;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import java.net.URL;
|
|
||||||
|
|
||||||
|
|
||||||
public interface FeedFetcher {
|
public interface FeedFetcher {
|
||||||
/**
|
/**
|
||||||
* <p>The default user agent. It is not marked final so
|
* <p>
|
||||||
* buggy java compiler will not write this string
|
* The default user agent. It is not marked final so buggy java compiler will not write this string into all classes that reference it.
|
||||||
* into all classes that reference it.</p>
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>http://tinyurl.com/64t5n points to https://rome.dev.java.net
|
* <p>
|
||||||
* Some servers ban user agents with "Java" in the name.</p>
|
* http://tinyurl.com/64t5n points to https://rome.dev.java.net Some servers ban user agents with "Java" in the name.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static String DEFAULT_USER_AGENT = "Rome Client (http://tinyurl.com/64t5n)";
|
public static String DEFAULT_USER_AGENT = "Rome Client (http://tinyurl.com/64t5n)";
|
||||||
|
@ -47,35 +46,48 @@ public interface FeedFetcher {
|
||||||
public abstract String getUserAgent();
|
public abstract String getUserAgent();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Turn on or off rfc3229 delta encoding</p>
|
* <p>
|
||||||
|
* Turn on or off rfc3229 delta encoding
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>See http://www.ietf.org/rfc/rfc3229.txt and http://bobwyman.pubsub.com/main/2004/09/using_rfc3229_w.html</p>
|
* <p>
|
||||||
|
* See http://www.ietf.org/rfc/rfc3229.txt and http://bobwyman.pubsub.com/main/2004/09/using_rfc3229_w.html
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>NOTE: This is experimental and feedback is welcome!</p>
|
* <p>
|
||||||
|
* NOTE: This is experimental and feedback is welcome!
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @param useDeltaEncoding
|
* @param useDeltaEncoding
|
||||||
*/
|
*/
|
||||||
public abstract void setUsingDeltaEncoding(boolean useDeltaEncoding);
|
public abstract void setUsingDeltaEncoding(boolean useDeltaEncoding);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Is this fetcher using rfc3229 delta encoding?</p>
|
* <p>
|
||||||
|
* Is this fetcher using rfc3229 delta encoding?
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public abstract boolean isUsingDeltaEncoding();
|
public abstract boolean isUsingDeltaEncoding();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Add a FetcherListener.</p>
|
* <p>
|
||||||
|
* Add a FetcherListener.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>The FetcherListener will receive an FetcherEvent when
|
* <p>
|
||||||
* a Fetcher event (feed polled, retrieved, etc) occurs</p>
|
* The FetcherListener will receive an FetcherEvent when a Fetcher event (feed polled, retrieved, etc) occurs
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @param listener The FetcherListener to recieve the event
|
* @param listener The FetcherListener to recieve the event
|
||||||
*/
|
*/
|
||||||
public abstract void addFetcherEventListener(FetcherListener listener);
|
public abstract void addFetcherEventListener(FetcherListener listener);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Remove a FetcherListener</p>
|
* <p>
|
||||||
|
* Remove a FetcherListener
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @param listener The FetcherListener to remove
|
* @param listener The FetcherListener to remove
|
||||||
*/
|
*/
|
||||||
|
@ -91,15 +103,13 @@ public interface FeedFetcher {
|
||||||
* @throws FeedException if the feed is not valid
|
* @throws FeedException if the feed is not valid
|
||||||
* @throws FetcherException if a HTTP error occurred
|
* @throws FetcherException if a HTTP error occurred
|
||||||
*/
|
*/
|
||||||
public abstract SyndFeed retrieveFeed(URL feedUrl)
|
public abstract SyndFeed retrieveFeed(URL feedUrl) throws IllegalArgumentException, IOException, FeedException, FetcherException;
|
||||||
throws IllegalArgumentException, IOException, FeedException, FetcherException;
|
|
||||||
|
|
||||||
public SyndFeed retrieveFeed(String userAgent, URL url)
|
public SyndFeed retrieveFeed(String userAgent, URL url) throws IllegalArgumentException, IOException, FeedException, FetcherException;
|
||||||
throws IllegalArgumentException, IOException, FeedException, FetcherException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If set to true, the WireFeed will be made accessible from the SyndFeed object returned from the Fetcher
|
* If set to true, the WireFeed will be made accessible from the SyndFeed object returned from the Fetcher via the originalWireFeed() method. Each Entry in
|
||||||
* via the originalWireFeed() method. Each Entry in the feed will have the corresponding wireEntry property set.
|
* the feed will have the corresponding wireEntry property set.
|
||||||
*/
|
*/
|
||||||
void setPreserveWireFeed(boolean preserveWireFeed);
|
void setPreserveWireFeed(boolean preserveWireFeed);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,8 @@ import java.util.EventObject;
|
||||||
import com.sun.syndication.feed.synd.SyndFeed;
|
import com.sun.syndication.feed.synd.SyndFeed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation note: FetcherEvent is not thread safe. Make sure that
|
* Implementation note: FetcherEvent is not thread safe. Make sure that they are only ever accessed by one thread. If necessary, make all getters and setters
|
||||||
* they are only ever accessed by one thread. If necessary, make all getters
|
* synchronized, or alternatively make all fields final.
|
||||||
* and setters synchronized, or alternatively make all fields final.
|
|
||||||
*
|
*
|
||||||
* @author nl
|
* @author nl
|
||||||
*/
|
*/
|
||||||
|
@ -23,27 +22,27 @@ public class FetcherEvent extends EventObject {
|
||||||
private String urlString;
|
private String urlString;
|
||||||
private SyndFeed feed;
|
private SyndFeed feed;
|
||||||
|
|
||||||
public FetcherEvent(Object source) {
|
public FetcherEvent(final Object source) {
|
||||||
super(source);
|
super(source);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FetcherEvent(final Object source, final String urlStr, final String eventType) {
|
||||||
public FetcherEvent(Object source, String urlStr, String eventType) {
|
|
||||||
this(source);
|
this(source);
|
||||||
setUrlString(urlStr);
|
setUrlString(urlStr);
|
||||||
setEventType(eventType);
|
setEventType(eventType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FetcherEvent(Object source, String urlStr, String eventType, SyndFeed feed) {
|
public FetcherEvent(final Object source, final String urlStr, final String eventType, final SyndFeed feed) {
|
||||||
this(source, urlStr, eventType);
|
this(source, urlStr, eventType);
|
||||||
setFeed(feed);
|
setFeed(feed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Returns the feed.
|
* @return Returns the feed.
|
||||||
*
|
*
|
||||||
* <p>The feed will only be set if the eventType is EVENT_TYPE_FEED_RETRIEVED</p>
|
* <p>
|
||||||
|
* The feed will only be set if the eventType is EVENT_TYPE_FEED_RETRIEVED
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public SyndFeed getFeed() {
|
public SyndFeed getFeed() {
|
||||||
return feed;
|
return feed;
|
||||||
|
@ -52,9 +51,11 @@ public class FetcherEvent extends EventObject {
|
||||||
/**
|
/**
|
||||||
* @param feed The feed to set.
|
* @param feed The feed to set.
|
||||||
*
|
*
|
||||||
* <p>The feed will only be set if the eventType is EVENT_TYPE_FEED_RETRIEVED</p>
|
* <p>
|
||||||
|
* The feed will only be set if the eventType is EVENT_TYPE_FEED_RETRIEVED
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public void setFeed(SyndFeed feed) {
|
public void setFeed(final SyndFeed feed) {
|
||||||
this.feed = feed;
|
this.feed = feed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,22 +65,25 @@ public class FetcherEvent extends EventObject {
|
||||||
public String getEventType() {
|
public String getEventType() {
|
||||||
return eventType;
|
return eventType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param eventType The eventType to set.
|
* @param eventType The eventType to set.
|
||||||
*/
|
*/
|
||||||
public void setEventType(String eventType) {
|
public void setEventType(final String eventType) {
|
||||||
this.eventType = eventType;
|
this.eventType = eventType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Returns the urlString.
|
* @return Returns the urlString.
|
||||||
*/
|
*/
|
||||||
public String getUrlString() {
|
public String getUrlString() {
|
||||||
return urlString;
|
return urlString;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param urlString The urlString to set.
|
* @param urlString The urlString to set.
|
||||||
*/
|
*/
|
||||||
public void setUrlString(String urlString) {
|
public void setUrlString(final String urlString) {
|
||||||
this.urlString = urlString;
|
this.urlString = urlString;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,21 +25,21 @@ public class FetcherException extends Exception {
|
||||||
|
|
||||||
int responseCode;
|
int responseCode;
|
||||||
|
|
||||||
public FetcherException(Throwable cause) {
|
public FetcherException(final Throwable cause) {
|
||||||
super();
|
super();
|
||||||
initCause(cause);
|
initCause(cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FetcherException(String message, Throwable cause) {
|
public FetcherException(final String message, final Throwable cause) {
|
||||||
super(message);
|
super(message);
|
||||||
initCause(cause);
|
initCause(cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FetcherException(String message) {
|
public FetcherException(final String message) {
|
||||||
super(message);
|
super(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FetcherException(int responseCode, String message) {
|
public FetcherException(final int responseCode, final String message) {
|
||||||
this(message);
|
this(message);
|
||||||
this.responseCode = responseCode;
|
this.responseCode = responseCode;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,11 +2,12 @@ package org.rometools.fetcher;
|
||||||
|
|
||||||
import java.util.EventListener;
|
import java.util.EventListener;
|
||||||
|
|
||||||
|
|
||||||
public interface FetcherListener extends EventListener {
|
public interface FetcherListener extends EventListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Called when a fetcher event occurs</p>
|
* <p>
|
||||||
|
* Called when a fetcher event occurs
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @param event the event that fired
|
* @param event the event that fired
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -26,12 +26,12 @@ import java.util.Iterator;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import com.sun.syndication.feed.synd.SyndFeed;
|
|
||||||
import org.rometools.fetcher.FeedFetcher;
|
import org.rometools.fetcher.FeedFetcher;
|
||||||
import org.rometools.fetcher.FetcherEvent;
|
import org.rometools.fetcher.FetcherEvent;
|
||||||
import org.rometools.fetcher.FetcherException;
|
import org.rometools.fetcher.FetcherException;
|
||||||
import org.rometools.fetcher.FetcherListener;
|
import org.rometools.fetcher.FetcherListener;
|
||||||
|
|
||||||
|
import com.sun.syndication.feed.synd.SyndFeed;
|
||||||
|
|
||||||
public abstract class AbstractFeedFetcher implements FeedFetcher {
|
public abstract class AbstractFeedFetcher implements FeedFetcher {
|
||||||
private final Set fetcherEventListeners;
|
private final Set fetcherEventListeners;
|
||||||
|
@ -39,13 +39,11 @@ public abstract class AbstractFeedFetcher implements FeedFetcher {
|
||||||
private boolean usingDeltaEncoding;
|
private boolean usingDeltaEncoding;
|
||||||
private boolean preserveWireFeed;
|
private boolean preserveWireFeed;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public AbstractFeedFetcher() {
|
public AbstractFeedFetcher() {
|
||||||
fetcherEventListeners = Collections.synchronizedSet(new HashSet());
|
fetcherEventListeners = Collections.synchronizedSet(new HashSet());
|
||||||
|
|
||||||
Properties props = new Properties(System.getProperties());
|
final Properties props = new Properties(System.getProperties());
|
||||||
String resourceName = "fetcher.properties";
|
final String resourceName = "fetcher.properties";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(resourceName);
|
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(resourceName);
|
||||||
|
@ -59,18 +57,18 @@ public abstract class AbstractFeedFetcher implements FeedFetcher {
|
||||||
} else {
|
} else {
|
||||||
System.err.println("Could not find " + resourceName + " on classpath");
|
System.err.println("Could not find " + resourceName + " on classpath");
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (final IOException e) {
|
||||||
// do nothing - we don't want to fail just because we could not find the version
|
// do nothing - we don't want to fail just because we could not find the version
|
||||||
System.err.println("Error reading " + resourceName + " from classpath: " + e.getMessage());
|
System.err.println("Error reading " + resourceName + " from classpath: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
setUserAgent(DEFAULT_USER_AGENT + " Ver: " + System.getProperty("rome.fetcher.version", "UNKNOWN"));
|
setUserAgent(DEFAULT_USER_AGENT + " Ver: " + System.getProperty("rome.fetcher.version", "UNKNOWN"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the User-Agent currently being sent to servers
|
* @return the User-Agent currently being sent to servers
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public synchronized String getUserAgent() {
|
public synchronized String getUserAgent() {
|
||||||
return userAgent;
|
return userAgent;
|
||||||
}
|
}
|
||||||
|
@ -78,7 +76,8 @@ public abstract class AbstractFeedFetcher implements FeedFetcher {
|
||||||
/**
|
/**
|
||||||
* @param string The User-Agent to sent to servers
|
* @param string The User-Agent to sent to servers
|
||||||
*/
|
*/
|
||||||
public synchronized void setUserAgent(String string) {
|
@Override
|
||||||
|
public synchronized void setUserAgent(final String string) {
|
||||||
userAgent = string;
|
userAgent = string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,17 +85,16 @@ public abstract class AbstractFeedFetcher implements FeedFetcher {
|
||||||
* @param eventType The event type to fire
|
* @param eventType The event type to fire
|
||||||
* @param connection the current connection
|
* @param connection the current connection
|
||||||
*/
|
*/
|
||||||
protected void fireEvent(String eventType, URLConnection connection) {
|
protected void fireEvent(final String eventType, final URLConnection connection) {
|
||||||
fireEvent(eventType, connection.getURL().toExternalForm(), null);
|
fireEvent(eventType, connection.getURL().toExternalForm(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param eventType The event type to fire
|
* @param eventType The event type to fire
|
||||||
* @param connection the current connection
|
* @param connection the current connection
|
||||||
* @param feed The feed to pass to the event
|
* @param feed The feed to pass to the event
|
||||||
*/
|
*/
|
||||||
protected void fireEvent(String eventType, URLConnection connection, SyndFeed feed) {
|
protected void fireEvent(final String eventType, final URLConnection connection, final SyndFeed feed) {
|
||||||
fireEvent(eventType, connection.getURL().toExternalForm(), feed);
|
fireEvent(eventType, connection.getURL().toExternalForm(), feed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,7 +102,7 @@ public abstract class AbstractFeedFetcher implements FeedFetcher {
|
||||||
* @param eventType The event type to fire
|
* @param eventType The event type to fire
|
||||||
* @param urlStr the current url as a string
|
* @param urlStr the current url as a string
|
||||||
*/
|
*/
|
||||||
protected void fireEvent(String eventType, String urlStr) {
|
protected void fireEvent(final String eventType, final String urlStr) {
|
||||||
fireEvent(eventType, urlStr, null);
|
fireEvent(eventType, urlStr, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,12 +111,12 @@ public abstract class AbstractFeedFetcher implements FeedFetcher {
|
||||||
* @param urlStr the current url as a string
|
* @param urlStr the current url as a string
|
||||||
* @param feed The feed to pass to the event
|
* @param feed The feed to pass to the event
|
||||||
*/
|
*/
|
||||||
protected void fireEvent(String eventType, String urlStr, SyndFeed feed) {
|
protected void fireEvent(final String eventType, final String urlStr, final SyndFeed feed) {
|
||||||
FetcherEvent fetcherEvent = new FetcherEvent(this, urlStr, eventType, feed);
|
final FetcherEvent fetcherEvent = new FetcherEvent(this, urlStr, eventType, feed);
|
||||||
synchronized (fetcherEventListeners) {
|
synchronized (fetcherEventListeners) {
|
||||||
Iterator iter = fetcherEventListeners.iterator();
|
final Iterator iter = fetcherEventListeners.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
FetcherListener fetcherEventListener = (FetcherListener) iter.next();
|
final FetcherListener fetcherEventListener = (FetcherListener) iter.next();
|
||||||
fetcherEventListener.fetcherEvent(fetcherEvent);
|
fetcherEventListener.fetcherEvent(fetcherEvent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -127,7 +125,8 @@ public abstract class AbstractFeedFetcher implements FeedFetcher {
|
||||||
/**
|
/**
|
||||||
* @see com.sun.syndication.fetcher.FeedFetcher#addFetcherEventListener(com.sun.syndication.fetcher.FetcherListener)
|
* @see com.sun.syndication.fetcher.FeedFetcher#addFetcherEventListener(com.sun.syndication.fetcher.FetcherListener)
|
||||||
*/
|
*/
|
||||||
public void addFetcherEventListener(FetcherListener listener) {
|
@Override
|
||||||
|
public void addFetcherEventListener(final FetcherListener listener) {
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
fetcherEventListeners.add(listener);
|
fetcherEventListeners.add(listener);
|
||||||
}
|
}
|
||||||
|
@ -137,7 +136,8 @@ public abstract class AbstractFeedFetcher implements FeedFetcher {
|
||||||
/**
|
/**
|
||||||
* @see com.sun.syndication.fetcher.FeedFetcher#removeFetcherEventListener(com.sun.syndication.fetcher.FetcherListener)
|
* @see com.sun.syndication.fetcher.FeedFetcher#removeFetcherEventListener(com.sun.syndication.fetcher.FetcherListener)
|
||||||
*/
|
*/
|
||||||
public void removeFetcherEventListener(FetcherListener listener) {
|
@Override
|
||||||
|
public void removeFetcherEventListener(final FetcherListener listener) {
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
fetcherEventListeners.remove(listener);
|
fetcherEventListeners.remove(listener);
|
||||||
}
|
}
|
||||||
|
@ -146,23 +146,28 @@ public abstract class AbstractFeedFetcher implements FeedFetcher {
|
||||||
/**
|
/**
|
||||||
* @return Returns the useDeltaEncoding.
|
* @return Returns the useDeltaEncoding.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public synchronized boolean isUsingDeltaEncoding() {
|
public synchronized boolean isUsingDeltaEncoding() {
|
||||||
return usingDeltaEncoding;
|
return usingDeltaEncoding;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param useDeltaEncoding The useDeltaEncoding to set.
|
* @param useDeltaEncoding The useDeltaEncoding to set.
|
||||||
*/
|
*/
|
||||||
public synchronized void setUsingDeltaEncoding(boolean useDeltaEncoding) {
|
@Override
|
||||||
this.usingDeltaEncoding = useDeltaEncoding;
|
public synchronized void setUsingDeltaEncoding(final boolean useDeltaEncoding) {
|
||||||
|
usingDeltaEncoding = useDeltaEncoding;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Handles HTTP error codes.</p>
|
* <p>
|
||||||
|
* Handles HTTP error codes.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @param responseCode the HTTP response code
|
* @param responseCode the HTTP response code
|
||||||
* @throws FetcherException if response code is in the range 400 to 599 inclusive
|
* @throws FetcherException if response code is in the range 400 to 599 inclusive
|
||||||
*/
|
*/
|
||||||
protected void handleErrorCodes(int responseCode) throws FetcherException {
|
protected void handleErrorCodes(final int responseCode) throws FetcherException {
|
||||||
// Handle 2xx codes as OK, so ignore them here
|
// Handle 2xx codes as OK, so ignore them here
|
||||||
// 3xx codes are handled by the HttpURLConnection class
|
// 3xx codes are handled by the HttpURLConnection class
|
||||||
if (responseCode == 403) {
|
if (responseCode == 403) {
|
||||||
|
@ -175,25 +180,28 @@ public abstract class AbstractFeedFetcher implements FeedFetcher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void throw4XXError(int responseCode) throws FetcherException {
|
protected void throw4XXError(final int responseCode) throws FetcherException {
|
||||||
throw new FetcherException(responseCode, "The requested resource could not be found. HTTP Response code was:" + responseCode);
|
throw new FetcherException(responseCode, "The requested resource could not be found. HTTP Response code was:" + responseCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void throwAuthenticationError(int responseCode) throws FetcherException {
|
protected void throwAuthenticationError(final int responseCode) throws FetcherException {
|
||||||
throw new FetcherException(responseCode, "Authentication required for that resource. HTTP Response code was:" + responseCode);
|
throw new FetcherException(responseCode, "Authentication required for that resource. HTTP Response code was:" + responseCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Combine the entries in two feeds into a single feed.</p>
|
* <p>
|
||||||
|
* Combine the entries in two feeds into a single feed.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>The returned feed will have the same data as the newFeed parameter, with
|
* <p>
|
||||||
* the entries from originalFeed appended to the end of its entries.</p>
|
* The returned feed will have the same data as the newFeed parameter, with the entries from originalFeed appended to the end of its entries.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @param originalFeed
|
* @param originalFeed
|
||||||
* @param newFeed
|
* @param newFeed
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static SyndFeed combineFeeds(SyndFeed originalFeed, SyndFeed newFeed) {
|
public static SyndFeed combineFeeds(final SyndFeed originalFeed, final SyndFeed newFeed) {
|
||||||
SyndFeed result;
|
SyndFeed result;
|
||||||
try {
|
try {
|
||||||
result = (SyndFeed) newFeed.clone();
|
result = (SyndFeed) newFeed.clone();
|
||||||
|
@ -201,8 +209,8 @@ public abstract class AbstractFeedFetcher implements FeedFetcher {
|
||||||
result.getEntries().addAll(result.getEntries().size(), originalFeed.getEntries());
|
result.getEntries().addAll(result.getEntries().size(), originalFeed.getEntries());
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
} catch (CloneNotSupportedException e) {
|
} catch (final CloneNotSupportedException e) {
|
||||||
IllegalArgumentException iae = new IllegalArgumentException("Cannot clone feed");
|
final IllegalArgumentException iae = new IllegalArgumentException("Cannot clone feed");
|
||||||
iae.initCause(e);
|
iae.initCause(e);
|
||||||
throw iae;
|
throw iae;
|
||||||
}
|
}
|
||||||
|
@ -212,7 +220,8 @@ public abstract class AbstractFeedFetcher implements FeedFetcher {
|
||||||
return preserveWireFeed;
|
return preserveWireFeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPreserveWireFeed(boolean preserveWireFeed) {
|
@Override
|
||||||
|
public void setPreserveWireFeed(final boolean preserveWireFeed) {
|
||||||
this.preserveWireFeed = preserveWireFeed;
|
this.preserveWireFeed = preserveWireFeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,18 +9,19 @@ import org.rometools.fetcher.FetcherListener;
|
||||||
|
|
||||||
public class AbstractFeedFetcherBeanInfo extends SimpleBeanInfo {
|
public class AbstractFeedFetcherBeanInfo extends SimpleBeanInfo {
|
||||||
|
|
||||||
|
@Override
|
||||||
public EventSetDescriptor[] getEventSetDescriptors() {
|
public EventSetDescriptor[] getEventSetDescriptors() {
|
||||||
try {
|
try {
|
||||||
Class clz = AbstractFeedFetcher.class; // get the class object which we'll describe
|
final Class clz = AbstractFeedFetcher.class; // get the class object which we'll describe
|
||||||
Method addMethod = clz.getMethod("addFetcherEventListener", new Class[] { FetcherListener.class });
|
final Method addMethod = clz.getMethod("addFetcherEventListener", new Class[] { FetcherListener.class });
|
||||||
Method removeMethod = clz.getMethod("removeFetcherEventListener", new Class[] { FetcherListener.class });
|
final Method removeMethod = clz.getMethod("removeFetcherEventListener", new Class[] { FetcherListener.class });
|
||||||
Method listenerMethod = FetcherListener.class.getMethod("fetcherEvent", new Class[] { FetcherEvent.class });
|
final Method listenerMethod = FetcherListener.class.getMethod("fetcherEvent", new Class[] { FetcherEvent.class });
|
||||||
|
|
||||||
EventSetDescriptor est = new EventSetDescriptor("fetcherEvent", clz, new Method[] { listenerMethod }, addMethod, removeMethod);
|
final EventSetDescriptor est = new EventSetDescriptor("fetcherEvent", clz, new Method[] { listenerMethod }, addMethod, removeMethod);
|
||||||
EventSetDescriptor[] results = new EventSetDescriptor[] { est };
|
final EventSetDescriptor[] results = new EventSetDescriptor[] { est };
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
} catch (Exception e) {
|
} catch (final Exception e) {
|
||||||
// IntrospectionException, SecurityException and/or NoSuchMethodException can be thrown here
|
// IntrospectionException, SecurityException and/or NoSuchMethodException can be thrown here
|
||||||
// the best we can do is to convert them to runtime exceptions
|
// the best we can do is to convert them to runtime exceptions
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
|
|
|
@ -23,8 +23,6 @@ import java.io.IOException;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.io.ObjectOutputStream;
|
import java.io.ObjectOutputStream;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import javax.swing.text.Utilities;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disk based cache.
|
* Disk based cache.
|
||||||
|
@ -32,53 +30,55 @@ import javax.swing.text.Utilities;
|
||||||
public class DiskFeedInfoCache implements FeedFetcherCache {
|
public class DiskFeedInfoCache implements FeedFetcherCache {
|
||||||
|
|
||||||
protected String cachePath = null;
|
protected String cachePath = null;
|
||||||
public DiskFeedInfoCache(String cachePath) {
|
|
||||||
|
public DiskFeedInfoCache(final String cachePath) {
|
||||||
this.cachePath = cachePath;
|
this.cachePath = cachePath;
|
||||||
}
|
}
|
||||||
public SyndFeedInfo getFeedInfo(URL url) {
|
|
||||||
|
@Override
|
||||||
|
public SyndFeedInfo getFeedInfo(final URL url) {
|
||||||
SyndFeedInfo info = null;
|
SyndFeedInfo info = null;
|
||||||
String fileName = cachePath + File.separator + "feed_"
|
final String fileName = cachePath + File.separator + "feed_" + replaceNonAlphanumeric(url.toString(), '_').trim();
|
||||||
+ replaceNonAlphanumeric(url.toString(),'_').trim();
|
|
||||||
FileInputStream fis;
|
FileInputStream fis;
|
||||||
try {
|
try {
|
||||||
fis = new FileInputStream(fileName);
|
fis = new FileInputStream(fileName);
|
||||||
ObjectInputStream ois = new ObjectInputStream(fis);
|
final ObjectInputStream ois = new ObjectInputStream(fis);
|
||||||
info = (SyndFeedInfo) ois.readObject();
|
info = (SyndFeedInfo) ois.readObject();
|
||||||
fis.close();
|
fis.close();
|
||||||
} catch (FileNotFoundException fnfe) {
|
} catch (final FileNotFoundException fnfe) {
|
||||||
// That's OK, we'l return null
|
// That's OK, we'l return null
|
||||||
} catch (ClassNotFoundException cnfe) {
|
} catch (final ClassNotFoundException cnfe) {
|
||||||
// Error writing to cache is fatal
|
// Error writing to cache is fatal
|
||||||
throw new RuntimeException("Attempting to read from cache", cnfe);
|
throw new RuntimeException("Attempting to read from cache", cnfe);
|
||||||
} catch (IOException fnfe) {
|
} catch (final IOException fnfe) {
|
||||||
// Error writing to cache is fatal
|
// Error writing to cache is fatal
|
||||||
throw new RuntimeException("Attempting to read from cache", fnfe);
|
throw new RuntimeException("Attempting to read from cache", fnfe);
|
||||||
}
|
}
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFeedInfo(URL url, SyndFeedInfo feedInfo) {
|
@Override
|
||||||
String fileName = cachePath + File.separator + "feed_"
|
public void setFeedInfo(final URL url, final SyndFeedInfo feedInfo) {
|
||||||
+ replaceNonAlphanumeric(url.toString(),'_').trim();
|
final String fileName = cachePath + File.separator + "feed_" + replaceNonAlphanumeric(url.toString(), '_').trim();
|
||||||
FileOutputStream fos;
|
FileOutputStream fos;
|
||||||
try {
|
try {
|
||||||
fos = new FileOutputStream(fileName);
|
fos = new FileOutputStream(fileName);
|
||||||
ObjectOutputStream oos = new ObjectOutputStream(fos);
|
final ObjectOutputStream oos = new ObjectOutputStream(fos);
|
||||||
oos.writeObject(feedInfo);
|
oos.writeObject(feedInfo);
|
||||||
fos.flush();
|
fos.flush();
|
||||||
fos.close();
|
fos.close();
|
||||||
} catch (Exception e) {
|
} catch (final Exception e) {
|
||||||
// Error writing to cache is fatal
|
// Error writing to cache is fatal
|
||||||
throw new RuntimeException("Attempting to write to cache", e);
|
throw new RuntimeException("Attempting to write to cache", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String replaceNonAlphanumeric(String str, char subst) {
|
public static String replaceNonAlphanumeric(final String str, final char subst) {
|
||||||
StringBuffer ret = new StringBuffer(str.length());
|
final StringBuffer ret = new StringBuffer(str.length());
|
||||||
char[] testChars = str.toCharArray();
|
final char[] testChars = str.toCharArray();
|
||||||
for (int i = 0; i < testChars.length; i++) {
|
for (final char testChar : testChars) {
|
||||||
if (Character.isLetterOrDigit(testChars[i])) {
|
if (Character.isLetterOrDigit(testChar)) {
|
||||||
ret.append(testChars[i]);
|
ret.append(testChar);
|
||||||
} else {
|
} else {
|
||||||
ret.append(subst);
|
ret.append(subst);
|
||||||
}
|
}
|
||||||
|
@ -89,15 +89,16 @@ public class DiskFeedInfoCache implements FeedFetcherCache {
|
||||||
/**
|
/**
|
||||||
* Clear the cache.
|
* Clear the cache.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public synchronized void clear() {
|
public synchronized void clear() {
|
||||||
final File file = new File(this.cachePath);
|
final File file = new File(cachePath);
|
||||||
// only do the delete if the directory exists
|
// only do the delete if the directory exists
|
||||||
if (file.exists() && file.canWrite()) {
|
if (file.exists() && file.canWrite()) {
|
||||||
// make the directory empty
|
// make the directory empty
|
||||||
final String[] files = file.list();
|
final String[] files = file.list();
|
||||||
final int len = files.length;
|
final int len = files.length;
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
File deleteMe = new File(this.cachePath + File.separator + files[i]);
|
final File deleteMe = new File(cachePath + File.separator + files[i]);
|
||||||
deleteMe.delete();
|
deleteMe.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,27 +106,27 @@ public class DiskFeedInfoCache implements FeedFetcherCache {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public SyndFeedInfo remove( URL url ) {
|
@Override
|
||||||
|
public SyndFeedInfo remove(final URL url) {
|
||||||
SyndFeedInfo info = null;
|
SyndFeedInfo info = null;
|
||||||
String fileName = cachePath + File.separator + "feed_"
|
final String fileName = cachePath + File.separator + "feed_" + replaceNonAlphanumeric(url.toString(), '_').trim();
|
||||||
+ replaceNonAlphanumeric(url.toString(),'_').trim();
|
|
||||||
FileInputStream fis;
|
FileInputStream fis;
|
||||||
try {
|
try {
|
||||||
fis = new FileInputStream(fileName);
|
fis = new FileInputStream(fileName);
|
||||||
ObjectInputStream ois = new ObjectInputStream(fis);
|
final ObjectInputStream ois = new ObjectInputStream(fis);
|
||||||
info = (SyndFeedInfo) ois.readObject();
|
info = (SyndFeedInfo) ois.readObject();
|
||||||
fis.close();
|
fis.close();
|
||||||
|
|
||||||
File file = new File( fileName );
|
final File file = new File(fileName);
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
file.delete();
|
file.delete();
|
||||||
}
|
}
|
||||||
} catch (FileNotFoundException fnfe) {
|
} catch (final FileNotFoundException fnfe) {
|
||||||
// That's OK, we'l return null
|
// That's OK, we'l return null
|
||||||
} catch (ClassNotFoundException cnfe) {
|
} catch (final ClassNotFoundException cnfe) {
|
||||||
// Error writing to cahce is fatal
|
// Error writing to cahce is fatal
|
||||||
throw new RuntimeException("Attempting to read from cache", cnfe);
|
throw new RuntimeException("Attempting to read from cache", cnfe);
|
||||||
} catch (IOException fnfe) {
|
} catch (final IOException fnfe) {
|
||||||
// Error writing to cahce is fatal
|
// Error writing to cahce is fatal
|
||||||
throw new RuntimeException("Attempting to read from cache", fnfe);
|
throw new RuntimeException("Attempting to read from cache", fnfe);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,10 @@ package org.rometools.fetcher.impl;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>An interface to allow caching of feed details. Implementing this allows the
|
* <p>
|
||||||
* {@link org.rometools.fetcher.io.HttpURLFeedFetcher} class to
|
* An interface to allow caching of feed details. Implementing this allows the {@link org.rometools.fetcher.io.HttpURLFeedFetcher} class to enable conditional
|
||||||
* enable conditional gets</p>
|
* gets
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @author Nick Lothian
|
* @author Nick Lothian
|
||||||
*
|
*
|
||||||
|
@ -50,6 +51,7 @@ public interface FeedFetcherCache {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes the SyndFeedInfo identified by the url from the cache.
|
* Removes the SyndFeedInfo identified by the url from the cache.
|
||||||
|
*
|
||||||
* @return The removed SyndFeedInfo
|
* @return The removed SyndFeedInfo
|
||||||
*/
|
*/
|
||||||
public SyndFeedInfo remove(URL feedUrl);
|
public SyndFeedInfo remove(URL feedUrl);
|
||||||
|
|
|
@ -22,13 +22,15 @@ import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>A very simple implementation of the {@link org.rometools.fetcher.impl.FeedFetcherCache} interface.</p>
|
* <p>
|
||||||
|
* A very simple implementation of the {@link org.rometools.fetcher.impl.FeedFetcherCache} interface.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>This implementation uses a HashMap to cache retrieved feeds. This implementation is
|
* <p>
|
||||||
* most suitible for sort term (client aggregator?) use, as the memory usage will increase
|
* This implementation uses a HashMap to cache retrieved feeds. This implementation is most suitible for sort term (client aggregator?) use, as the memory usage
|
||||||
* over time as the number of feeds in the cache increases.</p>
|
* will increase over time as the number of feeds in the cache increases.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @author Nick Lothian
|
* @author Nick Lothian
|
||||||
*
|
*
|
||||||
|
@ -41,10 +43,13 @@ public class HashMapFeedInfoCache implements FeedFetcherCache, Serializable {
|
||||||
private Map infoCache;
|
private Map infoCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for HashMapFeedInfoCache</p>
|
* <p>
|
||||||
|
* Constructor for HashMapFeedInfoCache
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>Only use this if you want multiple instances of the cache.
|
* <p>
|
||||||
* Usually getInstance() is more appropriate.</p>
|
* Only use this if you want multiple instances of the cache. Usually getInstance() is more appropriate.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public HashMapFeedInfoCache() {
|
public HashMapFeedInfoCache() {
|
||||||
|
@ -53,6 +58,7 @@ public class HashMapFeedInfoCache implements FeedFetcherCache, Serializable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the global instance of the cache
|
* Get the global instance of the cache
|
||||||
|
*
|
||||||
* @return an implementation of FeedFetcherCache
|
* @return an implementation of FeedFetcherCache
|
||||||
*/
|
*/
|
||||||
public static synchronized FeedFetcherCache getInstance() {
|
public static synchronized FeedFetcherCache getInstance() {
|
||||||
|
@ -63,29 +69,30 @@ public class HashMapFeedInfoCache implements FeedFetcherCache, Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Map createInfoCache() {
|
protected Map createInfoCache() {
|
||||||
return (Collections.synchronizedMap(new HashMap()));
|
return Collections.synchronizedMap(new HashMap());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Object get(final Object key) {
|
||||||
protected Object get(Object key) {
|
|
||||||
return getInfoCache().get(key);
|
return getInfoCache().get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see extensions.io.FeedFetcherCache#getFeedInfo(java.net.URL)
|
* @see extensions.io.FeedFetcherCache#getFeedInfo(java.net.URL)
|
||||||
*/
|
*/
|
||||||
public SyndFeedInfo getFeedInfo(URL feedUrl) {
|
@Override
|
||||||
|
public SyndFeedInfo getFeedInfo(final URL feedUrl) {
|
||||||
return (SyndFeedInfo) get(feedUrl.toString());
|
return (SyndFeedInfo) get(feedUrl.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void put(Object key, Object value) {
|
protected void put(final Object key, final Object value) {
|
||||||
getInfoCache().put(key, value);
|
getInfoCache().put(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see extensions.io.FeedFetcherCache#setFeedInfo(java.net.URL, extensions.io.SyndFeedInfo)
|
* @see extensions.io.FeedFetcherCache#setFeedInfo(java.net.URL, extensions.io.SyndFeedInfo)
|
||||||
*/
|
*/
|
||||||
public void setFeedInfo(URL feedUrl, SyndFeedInfo syndFeedInfo) {
|
@Override
|
||||||
|
public void setFeedInfo(final URL feedUrl, final SyndFeedInfo syndFeedInfo) {
|
||||||
put(feedUrl.toString(), syndFeedInfo);
|
put(feedUrl.toString(), syndFeedInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,19 +101,18 @@ public class HashMapFeedInfoCache implements FeedFetcherCache, Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The API of this class indicates that map must thread safe. In other
|
* The API of this class indicates that map must thread safe. In other words, be sure to wrap it in a synchronized map unless you know what you are doing.
|
||||||
* words, be sure to wrap it in a synchronized map unless you know
|
|
||||||
* what you are doing.
|
|
||||||
*
|
*
|
||||||
* @param map the map to use as the info cache.
|
* @param map the map to use as the info cache.
|
||||||
*/
|
*/
|
||||||
protected synchronized final void setInfoCache(Map map) {
|
protected synchronized final void setInfoCache(final Map map) {
|
||||||
infoCache = map;
|
infoCache = map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see com.sun.syndication.fetcher.impl.FeedFetcherCache#clear()
|
* @see com.sun.syndication.fetcher.impl.FeedFetcherCache#clear()
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public void clear() {
|
public void clear() {
|
||||||
synchronized (infoCache) {
|
synchronized (infoCache) {
|
||||||
infoCache.clear();
|
infoCache.clear();
|
||||||
|
@ -116,8 +122,11 @@ public class HashMapFeedInfoCache implements FeedFetcherCache, Serializable {
|
||||||
/**
|
/**
|
||||||
* @see com.sun.syndication.fetcher.impl.FeedFetcherCache#remove(java.net.URL)
|
* @see com.sun.syndication.fetcher.impl.FeedFetcherCache#remove(java.net.URL)
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public SyndFeedInfo remove(final URL url) {
|
public SyndFeedInfo remove(final URL url) {
|
||||||
if( url == null ) return null;
|
if (url == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return (SyndFeedInfo) infoCache.remove(url.toString());
|
return (SyndFeedInfo) infoCache.remove(url.toString());
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,10 +16,12 @@
|
||||||
*/
|
*/
|
||||||
package org.rometools.fetcher.impl;
|
package org.rometools.fetcher.impl;
|
||||||
|
|
||||||
import com.sun.syndication.feed.synd.SyndFeed;
|
import java.io.IOException;
|
||||||
import com.sun.syndication.io.FeedException;
|
import java.io.InputStream;
|
||||||
import com.sun.syndication.io.SyndFeedInput;
|
import java.net.HttpURLConnection;
|
||||||
import com.sun.syndication.io.XmlReader;
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.zip.GZIPInputStream;
|
||||||
|
|
||||||
import org.apache.commons.httpclient.Credentials;
|
import org.apache.commons.httpclient.Credentials;
|
||||||
import org.apache.commons.httpclient.Header;
|
import org.apache.commons.httpclient.Header;
|
||||||
|
@ -28,19 +30,13 @@ import org.apache.commons.httpclient.HttpException;
|
||||||
import org.apache.commons.httpclient.HttpMethod;
|
import org.apache.commons.httpclient.HttpMethod;
|
||||||
import org.apache.commons.httpclient.methods.GetMethod;
|
import org.apache.commons.httpclient.methods.GetMethod;
|
||||||
import org.apache.commons.httpclient.params.HttpClientParams;
|
import org.apache.commons.httpclient.params.HttpClientParams;
|
||||||
|
|
||||||
import org.rometools.fetcher.FetcherEvent;
|
import org.rometools.fetcher.FetcherEvent;
|
||||||
import org.rometools.fetcher.FetcherException;
|
import org.rometools.fetcher.FetcherException;
|
||||||
|
|
||||||
import java.io.IOException;
|
import com.sun.syndication.feed.synd.SyndFeed;
|
||||||
import java.io.InputStream;
|
import com.sun.syndication.io.FeedException;
|
||||||
|
import com.sun.syndication.io.SyndFeedInput;
|
||||||
import java.net.HttpURLConnection;
|
import com.sun.syndication.io.XmlReader;
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.URL;
|
|
||||||
|
|
||||||
import java.util.zip.GZIPInputStream;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Nick Lothian
|
* @author Nick Lothian
|
||||||
|
@ -59,39 +55,38 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
/**
|
/**
|
||||||
* @param cache
|
* @param cache
|
||||||
*/
|
*/
|
||||||
public HttpClientFeedFetcher(FeedFetcherCache cache) {
|
public HttpClientFeedFetcher(final FeedFetcherCache cache) {
|
||||||
this();
|
this();
|
||||||
setFeedInfoCache(cache);
|
setFeedInfoCache(cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpClientFeedFetcher(FeedFetcherCache cache, CredentialSupplier credentialSupplier) {
|
public HttpClientFeedFetcher(final FeedFetcherCache cache, final CredentialSupplier credentialSupplier) {
|
||||||
this(cache);
|
this(cache);
|
||||||
setCredentialSupplier(credentialSupplier);
|
setCredentialSupplier(credentialSupplier);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param timeout Sets the connect timeout for the HttpClient but using the URLConnection method name.
|
* @param timeout Sets the connect timeout for the HttpClient but using the URLConnection method name. Uses the HttpClientParams method
|
||||||
* Uses the HttpClientParams method setConnectionManagerTimeout instead of setConnectTimeout
|
* setConnectionManagerTimeout instead of setConnectTimeout
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public synchronized void setConnectTimeout(int timeout) {
|
public synchronized void setConnectTimeout(final int timeout) {
|
||||||
httpClientParams.setConnectionManagerTimeout(timeout);
|
httpClientParams.setConnectionManagerTimeout(timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The currently used connect timeout for the HttpClient but using the URLConnection method name.
|
* @return The currently used connect timeout for the HttpClient but using the URLConnection method name. Uses the HttpClientParams method
|
||||||
* Uses the HttpClientParams method getConnectionManagerTimeout instead of getConnectTimeout
|
* getConnectionManagerTimeout instead of getConnectTimeout
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public int getConnectTimeout() {
|
public int getConnectTimeout() {
|
||||||
return (int) this.getHttpClientParams()
|
return (int) getHttpClientParams().getConnectionManagerTimeout();
|
||||||
.getConnectionManagerTimeout();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param credentialSupplier The credentialSupplier to set.
|
* @param credentialSupplier The credentialSupplier to set.
|
||||||
*/
|
*/
|
||||||
public synchronized void setCredentialSupplier(CredentialSupplier credentialSupplier) {
|
public synchronized void setCredentialSupplier(final CredentialSupplier credentialSupplier) {
|
||||||
this.credentialSupplier = credentialSupplier;
|
this.credentialSupplier = credentialSupplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,7 +100,7 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
/**
|
/**
|
||||||
* @param feedInfoCache the feedInfoCache to set
|
* @param feedInfoCache the feedInfoCache to set
|
||||||
*/
|
*/
|
||||||
public synchronized void setFeedInfoCache(FeedFetcherCache feedInfoCache) {
|
public synchronized void setFeedInfoCache(final FeedFetcherCache feedInfoCache) {
|
||||||
this.feedInfoCache = feedInfoCache;
|
this.feedInfoCache = feedInfoCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +111,7 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
return feedInfoCache;
|
return feedInfoCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void setHttpClientMethodCallback(HttpClientMethodCallbackIntf httpClientMethodCallback) {
|
public synchronized void setHttpClientMethodCallback(final HttpClientMethodCallbackIntf httpClientMethodCallback) {
|
||||||
this.httpClientMethodCallback = httpClientMethodCallback;
|
this.httpClientMethodCallback = httpClientMethodCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,7 +122,7 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
/**
|
/**
|
||||||
* @param httpClientParams The httpClientParams to set.
|
* @param httpClientParams The httpClientParams to set.
|
||||||
*/
|
*/
|
||||||
public synchronized void setHttpClientParams(HttpClientParams httpClientParams) {
|
public synchronized void setHttpClientParams(final HttpClientParams httpClientParams) {
|
||||||
this.httpClientParams = httpClientParams;
|
this.httpClientParams = httpClientParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,13 +130,13 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
* @return Returns the httpClientParams.
|
* @return Returns the httpClientParams.
|
||||||
*/
|
*/
|
||||||
public synchronized HttpClientParams getHttpClientParams() {
|
public synchronized HttpClientParams getHttpClientParams() {
|
||||||
return this.httpClientParams;
|
return httpClientParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The currently used read timeout for the URLConnection, 0 is unlimited, i.e. no timeout
|
* @return The currently used read timeout for the URLConnection, 0 is unlimited, i.e. no timeout
|
||||||
*/
|
*/
|
||||||
public synchronized void setReadTimeout(int timeout) {
|
public synchronized void setReadTimeout(final int timeout) {
|
||||||
httpClientParams.setSoTimeout(timeout);
|
httpClientParams.setSoTimeout(timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,46 +144,43 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
* @return timeout the read timeout for the URLConnection to a specified timeout, in milliseconds.
|
* @return timeout the read timeout for the URLConnection to a specified timeout, in milliseconds.
|
||||||
*/
|
*/
|
||||||
public int getReadTimeout() {
|
public int getReadTimeout() {
|
||||||
return (int) this.getHttpClientParams()
|
return getHttpClientParams().getSoTimeout();
|
||||||
.getSoTimeout();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public SyndFeed retrieveFeed(URL url) throws IllegalArgumentException, IOException, FeedException, FetcherException {
|
@Override
|
||||||
return this.retrieveFeed(this.getUserAgent(), url);
|
public SyndFeed retrieveFeed(final URL url) throws IllegalArgumentException, IOException, FeedException, FetcherException {
|
||||||
|
return this.retrieveFeed(getUserAgent(), url);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.rometools.fetcher.FeedFetcher#retrieveFeed(java.net.URL)
|
* @see org.rometools.fetcher.FeedFetcher#retrieveFeed(java.net.URL)
|
||||||
*/
|
*/
|
||||||
public SyndFeed retrieveFeed(String userAgent, URL feedUrl)
|
@Override
|
||||||
throws IllegalArgumentException, IOException, FeedException, FetcherException {
|
public SyndFeed retrieveFeed(final String userAgent, final URL feedUrl) throws IllegalArgumentException, IOException, FeedException, FetcherException {
|
||||||
if (feedUrl == null) {
|
if (feedUrl == null) {
|
||||||
throw new IllegalArgumentException("null is not a valid URL");
|
throw new IllegalArgumentException("null is not a valid URL");
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Fix this
|
// TODO Fix this
|
||||||
// System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
|
// System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
|
||||||
HttpClient client = new HttpClient(httpClientParams);
|
final HttpClient client = new HttpClient(httpClientParams);
|
||||||
|
|
||||||
if (getCredentialSupplier() != null) {
|
if (getCredentialSupplier() != null) {
|
||||||
client.getState()
|
client.getState().setAuthenticationPreemptive(true);
|
||||||
.setAuthenticationPreemptive(true);
|
|
||||||
|
|
||||||
// TODO what should realm be here?
|
// TODO what should realm be here?
|
||||||
Credentials credentials = getCredentialSupplier()
|
final Credentials credentials = getCredentialSupplier().getCredentials(null, feedUrl.getHost());
|
||||||
.getCredentials(null, feedUrl.getHost());
|
|
||||||
|
|
||||||
if (credentials != null) {
|
if (credentials != null) {
|
||||||
client.getState()
|
client.getState().setCredentials(null, feedUrl.getHost(), credentials);
|
||||||
.setCredentials(null, feedUrl.getHost(), credentials);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
System.setProperty("httpclient.useragent", userAgent);
|
System.setProperty("httpclient.useragent", userAgent);
|
||||||
|
|
||||||
String urlStr = feedUrl.toString();
|
final String urlStr = feedUrl.toString();
|
||||||
|
|
||||||
HttpMethod method = new GetMethod(urlStr);
|
final HttpMethod method = new GetMethod(urlStr);
|
||||||
method.addRequestHeader("Accept-Encoding", "gzip");
|
method.addRequestHeader("Accept-Encoding", "gzip");
|
||||||
method.addRequestHeader("User-Agent", userAgent);
|
method.addRequestHeader("User-Agent", userAgent);
|
||||||
method.setFollowRedirects(true);
|
method.setFollowRedirects(true);
|
||||||
|
@ -199,7 +191,7 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FeedFetcherCache cache = getFeedInfoCache();
|
final FeedFetcherCache cache = getFeedInfoCache();
|
||||||
|
|
||||||
if (cache != null) {
|
if (cache != null) {
|
||||||
// retrieve feed
|
// retrieve feed
|
||||||
|
@ -220,7 +212,7 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int statusCode = client.executeMethod(method);
|
final int statusCode = client.executeMethod(method);
|
||||||
fireEvent(FetcherEvent.EVENT_TYPE_FEED_POLLED, urlStr);
|
fireEvent(FetcherEvent.EVENT_TYPE_FEED_POLLED, urlStr);
|
||||||
handleErrorCodes(statusCode);
|
handleErrorCodes(statusCode);
|
||||||
|
|
||||||
|
@ -242,7 +234,7 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
} else {
|
} else {
|
||||||
// cache is not in use
|
// cache is not in use
|
||||||
try {
|
try {
|
||||||
int statusCode = client.executeMethod(method);
|
final int statusCode = client.executeMethod(method);
|
||||||
fireEvent(FetcherEvent.EVENT_TYPE_FEED_POLLED, urlStr);
|
fireEvent(FetcherEvent.EVENT_TYPE_FEED_POLLED, urlStr);
|
||||||
handleErrorCodes(statusCode);
|
handleErrorCodes(statusCode);
|
||||||
|
|
||||||
|
@ -254,15 +246,15 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private SyndFeed getFeed(SyndFeedInfo syndFeedInfo, String urlStr, HttpMethod method, int statusCode)
|
private SyndFeed getFeed(final SyndFeedInfo syndFeedInfo, final String urlStr, final HttpMethod method, final int statusCode) throws IOException,
|
||||||
throws IOException, HttpException, FetcherException, FeedException {
|
HttpException, FetcherException, FeedException {
|
||||||
if ((statusCode == HttpURLConnection.HTTP_NOT_MODIFIED) && (syndFeedInfo != null)) {
|
if (statusCode == HttpURLConnection.HTTP_NOT_MODIFIED && syndFeedInfo != null) {
|
||||||
fireEvent(FetcherEvent.EVENT_TYPE_FEED_UNCHANGED, urlStr);
|
fireEvent(FetcherEvent.EVENT_TYPE_FEED_UNCHANGED, urlStr);
|
||||||
|
|
||||||
return syndFeedInfo.getSyndFeed();
|
return syndFeedInfo.getSyndFeed();
|
||||||
}
|
}
|
||||||
|
|
||||||
SyndFeed feed = retrieveFeed(urlStr, method);
|
final SyndFeed feed = retrieveFeed(urlStr, method);
|
||||||
fireEvent(FetcherEvent.EVENT_TYPE_FEED_RETRIEVED, urlStr, feed);
|
fireEvent(FetcherEvent.EVENT_TYPE_FEED_RETRIEVED, urlStr, feed);
|
||||||
|
|
||||||
return feed;
|
return feed;
|
||||||
|
@ -276,7 +268,7 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
* @return
|
* @return
|
||||||
* @throws MalformedURLException
|
* @throws MalformedURLException
|
||||||
*/
|
*/
|
||||||
private SyndFeedInfo buildSyndFeedInfo(URL feedUrl, String urlStr, HttpMethod method, SyndFeed feed, int statusCode)
|
private SyndFeedInfo buildSyndFeedInfo(final URL feedUrl, final String urlStr, final HttpMethod method, SyndFeed feed, final int statusCode)
|
||||||
throws MalformedURLException {
|
throws MalformedURLException {
|
||||||
SyndFeedInfo syndFeedInfo;
|
SyndFeedInfo syndFeedInfo;
|
||||||
syndFeedInfo = new SyndFeedInfo();
|
syndFeedInfo = new SyndFeedInfo();
|
||||||
|
@ -285,19 +277,18 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
syndFeedInfo.setUrl(new URL(urlStr));
|
syndFeedInfo.setUrl(new URL(urlStr));
|
||||||
syndFeedInfo.setId(feedUrl.toString());
|
syndFeedInfo.setId(feedUrl.toString());
|
||||||
|
|
||||||
Header imHeader = method.getResponseHeader("IM");
|
final Header imHeader = method.getResponseHeader("IM");
|
||||||
|
|
||||||
if ((imHeader != null) && (imHeader.getValue()
|
if (imHeader != null && imHeader.getValue().indexOf("feed") >= 0 && isUsingDeltaEncoding()) {
|
||||||
.indexOf("feed") >= 0) && isUsingDeltaEncoding()) {
|
final FeedFetcherCache cache = getFeedInfoCache();
|
||||||
FeedFetcherCache cache = getFeedInfoCache();
|
|
||||||
|
|
||||||
if ((cache != null) && (statusCode == 226)) {
|
if (cache != null && statusCode == 226) {
|
||||||
// client is setup to use http delta encoding and the server supports it and has returned a delta encoded response
|
// client is setup to use http delta encoding and the server supports it and has returned a delta encoded response
|
||||||
// This response only includes new items
|
// This response only includes new items
|
||||||
SyndFeedInfo cachedInfo = cache.getFeedInfo(feedUrl);
|
final SyndFeedInfo cachedInfo = cache.getFeedInfo(feedUrl);
|
||||||
|
|
||||||
if (cachedInfo != null) {
|
if (cachedInfo != null) {
|
||||||
SyndFeed cachedFeed = cachedInfo.getSyndFeed();
|
final SyndFeed cachedFeed = cachedInfo.getSyndFeed();
|
||||||
|
|
||||||
// set the new feed to be the orginal feed plus the new items
|
// set the new feed to be the orginal feed plus the new items
|
||||||
feed = combineFeeds(cachedFeed, feed);
|
feed = combineFeeds(cachedFeed, feed);
|
||||||
|
@ -305,13 +296,13 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Header lastModifiedHeader = method.getResponseHeader("Last-Modified");
|
final Header lastModifiedHeader = method.getResponseHeader("Last-Modified");
|
||||||
|
|
||||||
if (lastModifiedHeader != null) {
|
if (lastModifiedHeader != null) {
|
||||||
syndFeedInfo.setLastModified(lastModifiedHeader.getValue());
|
syndFeedInfo.setLastModified(lastModifiedHeader.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
Header eTagHeader = method.getResponseHeader("ETag");
|
final Header eTagHeader = method.getResponseHeader("ETag");
|
||||||
|
|
||||||
if (eTagHeader != null) {
|
if (eTagHeader != null) {
|
||||||
syndFeedInfo.setETag(eTagHeader.getValue());
|
syndFeedInfo.setETag(eTagHeader.getValue());
|
||||||
|
@ -332,12 +323,10 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
* @throws FetcherException
|
* @throws FetcherException
|
||||||
* @throws FeedException
|
* @throws FeedException
|
||||||
*/
|
*/
|
||||||
private SyndFeed retrieveFeed(String urlStr, HttpMethod method)
|
private SyndFeed retrieveFeed(final String urlStr, final HttpMethod method) throws IOException, HttpException, FetcherException, FeedException {
|
||||||
throws IOException, HttpException, FetcherException, FeedException {
|
|
||||||
InputStream stream = null;
|
InputStream stream = null;
|
||||||
|
|
||||||
if ((method.getResponseHeader("Content-Encoding") != null) &&
|
if (method.getResponseHeader("Content-Encoding") != null && "gzip".equalsIgnoreCase(method.getResponseHeader("Content-Encoding").getValue())) {
|
||||||
("gzip".equalsIgnoreCase(method.getResponseHeader("Content-Encoding").getValue()))) {
|
|
||||||
stream = new GZIPInputStream(method.getResponseBodyAsStream());
|
stream = new GZIPInputStream(method.getResponseBodyAsStream());
|
||||||
} else {
|
} else {
|
||||||
stream = method.getResponseBodyAsStream();
|
stream = method.getResponseBodyAsStream();
|
||||||
|
@ -352,7 +341,7 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
reader = new XmlReader(stream, true);
|
reader = new XmlReader(stream, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
SyndFeedInput syndFeedInput = new SyndFeedInput();
|
final SyndFeedInput syndFeedInput = new SyndFeedInput();
|
||||||
syndFeedInput.setPreserveWireFeed(isPreserveWireFeed());
|
syndFeedInput.setPreserveWireFeed(isPreserveWireFeed());
|
||||||
|
|
||||||
return syndFeedInput.build(reader);
|
return syndFeedInput.build(reader);
|
||||||
|
@ -369,9 +358,8 @@ public class HttpClientFeedFetcher extends AbstractFeedFetcher {
|
||||||
|
|
||||||
public interface HttpClientMethodCallbackIntf {
|
public interface HttpClientMethodCallbackIntf {
|
||||||
/**
|
/**
|
||||||
* Allows access to the underlying HttpClient HttpMethod object.
|
* Allows access to the underlying HttpClient HttpMethod object. Note that in most cases, method.setRequestHeader(String, String) is what you want to do
|
||||||
* Note that in most cases, method.setRequestHeader(String, String)
|
* (rather than method.addRequestHeader(String, String))
|
||||||
* is what you want to do (rather than method.addRequestHeader(String, String))
|
|
||||||
*
|
*
|
||||||
* @param method
|
* @param method
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -24,23 +24,30 @@ import java.net.URL;
|
||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
import java.util.zip.GZIPInputStream;
|
import java.util.zip.GZIPInputStream;
|
||||||
|
|
||||||
import com.sun.syndication.feed.synd.SyndFeed;
|
|
||||||
import org.rometools.fetcher.FetcherEvent;
|
import org.rometools.fetcher.FetcherEvent;
|
||||||
import org.rometools.fetcher.FetcherException;
|
import org.rometools.fetcher.FetcherException;
|
||||||
|
|
||||||
|
import com.sun.syndication.feed.synd.SyndFeed;
|
||||||
import com.sun.syndication.io.FeedException;
|
import com.sun.syndication.io.FeedException;
|
||||||
import com.sun.syndication.io.SyndFeedInput;
|
import com.sun.syndication.io.SyndFeedInput;
|
||||||
import com.sun.syndication.io.XmlReader;
|
import com.sun.syndication.io.XmlReader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Class to retrieve syndication files via HTTP.</p>
|
* <p>
|
||||||
|
* Class to retrieve syndication files via HTTP.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>If passed a {@link org.rometools.fetcher.impl.FeedFetcherCache} in the
|
* <p>
|
||||||
* constructor it will use conditional gets to only retrieve modified content.</p>
|
* If passed a {@link org.rometools.fetcher.impl.FeedFetcherCache} in the constructor it will use conditional gets to only retrieve modified content.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>The class uses the Accept-Encoding: gzip header to retrieve gzipped feeds where
|
* <p>
|
||||||
* supported by the server.</p>
|
* The class uses the Accept-Encoding: gzip header to retrieve gzipped feeds where supported by the server.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* Simple usage:
|
||||||
*
|
*
|
||||||
* <p>Simple usage:
|
|
||||||
* <pre>
|
* <pre>
|
||||||
* // create the cache
|
* // create the cache
|
||||||
* FeedFetcherCache feedInfoCache = HashMapFeedInfoCache.getFeedInfoCache();
|
* FeedFetcherCache feedInfoCache = HashMapFeedInfoCache.getFeedInfoCache();
|
||||||
|
@ -52,8 +59,10 @@ import com.sun.syndication.io.XmlReader;
|
||||||
*
|
*
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @see <a href="http://fishbowl.pastiche.org/2002/10/21/http_conditional_get_for_rss_hackers">http://fishbowl.pastiche.org/2002/10/21/http_conditional_get_for_rss_hackers</a>
|
* @see <a
|
||||||
* @see <a href="http://diveintomark.org/archives/2003/07/21/atom_aggregator_behavior_http_level">http://diveintomark.org/archives/2003/07/21/atom_aggregator_behavior_http_level</a>
|
* href="http://fishbowl.pastiche.org/2002/10/21/http_conditional_get_for_rss_hackers">http://fishbowl.pastiche.org/2002/10/21/http_conditional_get_for_rss_hackers</a>
|
||||||
|
* @see <a
|
||||||
|
* href="http://diveintomark.org/archives/2003/07/21/atom_aggregator_behavior_http_level">http://diveintomark.org/archives/2003/07/21/atom_aggregator_behavior_http_level</a>
|
||||||
* @see <a href="http://bobwyman.pubsub.com/main/2004/09/using_rfc3229_w.html">http://bobwyman.pubsub.com/main/2004/09/using_rfc3229_w.html</a>
|
* @see <a href="http://bobwyman.pubsub.com/main/2004/09/using_rfc3229_w.html">http://bobwyman.pubsub.com/main/2004/09/using_rfc3229_w.html</a>
|
||||||
* @author Nick Lothian
|
* @author Nick Lothian
|
||||||
*/
|
*/
|
||||||
|
@ -64,7 +73,6 @@ public class HttpURLFeedFetcher extends AbstractFeedFetcher {
|
||||||
|
|
||||||
private FeedFetcherCache feedInfoCache;
|
private FeedFetcherCache feedInfoCache;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor to use HttpURLFeedFetcher without caching of feeds
|
* Constructor to use HttpURLFeedFetcher without caching of feeds
|
||||||
*
|
*
|
||||||
|
@ -78,13 +86,14 @@ public class HttpURLFeedFetcher extends AbstractFeedFetcher {
|
||||||
*
|
*
|
||||||
* @param feedCache - an instance of the FeedFetcherCache interface
|
* @param feedCache - an instance of the FeedFetcherCache interface
|
||||||
*/
|
*/
|
||||||
public HttpURLFeedFetcher(FeedFetcherCache feedInfoCache) {
|
public HttpURLFeedFetcher(final FeedFetcherCache feedInfoCache) {
|
||||||
this();
|
this();
|
||||||
setFeedInfoCache(feedInfoCache);
|
setFeedInfoCache(feedInfoCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SyndFeed retrieveFeed(URL feedUrl) throws IllegalArgumentException, IOException, FeedException, FetcherException {
|
@Override
|
||||||
return this.retrieveFeed(this.getUserAgent(), feedUrl);
|
public SyndFeed retrieveFeed(final URL feedUrl) throws IllegalArgumentException, IOException, FeedException, FetcherException {
|
||||||
|
return this.retrieveFeed(getUserAgent(), feedUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -97,19 +106,20 @@ public class HttpURLFeedFetcher extends AbstractFeedFetcher {
|
||||||
* @throws FeedException if the feed is not valid
|
* @throws FeedException if the feed is not valid
|
||||||
* @throws FetcherException if a HTTP error occurred
|
* @throws FetcherException if a HTTP error occurred
|
||||||
*/
|
*/
|
||||||
public SyndFeed retrieveFeed(String userAgent, URL feedUrl) throws IllegalArgumentException, IOException, FeedException, FetcherException {
|
@Override
|
||||||
|
public SyndFeed retrieveFeed(final String userAgent, final URL feedUrl) throws IllegalArgumentException, IOException, FeedException, FetcherException {
|
||||||
if (feedUrl == null) {
|
if (feedUrl == null) {
|
||||||
throw new IllegalArgumentException("null is not a valid URL");
|
throw new IllegalArgumentException("null is not a valid URL");
|
||||||
}
|
}
|
||||||
|
|
||||||
URLConnection connection = feedUrl.openConnection();
|
final URLConnection connection = feedUrl.openConnection();
|
||||||
if (!(connection instanceof HttpURLConnection)) {
|
if (!(connection instanceof HttpURLConnection)) {
|
||||||
throw new IllegalArgumentException(feedUrl.toExternalForm() + " is not a valid HTTP Url");
|
throw new IllegalArgumentException(feedUrl.toExternalForm() + " is not a valid HTTP Url");
|
||||||
}
|
}
|
||||||
HttpURLConnection httpConnection = (HttpURLConnection)connection;
|
final HttpURLConnection httpConnection = (HttpURLConnection) connection;
|
||||||
// httpConnection.setInstanceFollowRedirects(true); // this is true by default, but can be changed on a claswide basis
|
// httpConnection.setInstanceFollowRedirects(true); // this is true by default, but can be changed on a claswide basis
|
||||||
|
|
||||||
FeedFetcherCache cache = getFeedInfoCache();
|
final FeedFetcherCache cache = getFeedInfoCache();
|
||||||
if (cache != null) {
|
if (cache != null) {
|
||||||
SyndFeedInfo syndFeedInfo = cache.getFeedInfo(feedUrl);
|
SyndFeedInfo syndFeedInfo = cache.getFeedInfo(feedUrl);
|
||||||
setRequestHeaders(connection, syndFeedInfo);
|
setRequestHeaders(connection, syndFeedInfo);
|
||||||
|
@ -123,7 +133,7 @@ public class HttpURLFeedFetcher extends AbstractFeedFetcher {
|
||||||
retrieveAndCacheFeed(feedUrl, syndFeedInfo, httpConnection);
|
retrieveAndCacheFeed(feedUrl, syndFeedInfo, httpConnection);
|
||||||
} else {
|
} else {
|
||||||
// check the response code
|
// check the response code
|
||||||
int responseCode = httpConnection.getResponseCode();
|
final int responseCode = httpConnection.getResponseCode();
|
||||||
if (responseCode != HttpURLConnection.HTTP_NOT_MODIFIED) {
|
if (responseCode != HttpURLConnection.HTTP_NOT_MODIFIED) {
|
||||||
// the response code is not 304 NOT MODIFIED
|
// the response code is not 304 NOT MODIFIED
|
||||||
// This is either because the feed server
|
// This is either because the feed server
|
||||||
|
@ -151,7 +161,7 @@ public class HttpURLFeedFetcher extends AbstractFeedFetcher {
|
||||||
try {
|
try {
|
||||||
inputStream = httpConnection.getInputStream();
|
inputStream = httpConnection.getInputStream();
|
||||||
return getSyndFeedFromStream(inputStream, connection);
|
return getSyndFeedFromStream(inputStream, connection);
|
||||||
} catch (java.io.IOException e) {
|
} catch (final java.io.IOException e) {
|
||||||
handleErrorCodes(((HttpURLConnection) connection).getResponseCode());
|
handleErrorCodes(((HttpURLConnection) connection).getResponseCode());
|
||||||
} finally {
|
} finally {
|
||||||
if (inputStream != null) {
|
if (inputStream != null) {
|
||||||
|
@ -164,11 +174,12 @@ public class HttpURLFeedFetcher extends AbstractFeedFetcher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void retrieveAndCacheFeed(URL feedUrl, SyndFeedInfo syndFeedInfo, HttpURLConnection connection) throws IllegalArgumentException, FeedException, FetcherException, IOException {
|
protected void retrieveAndCacheFeed(final URL feedUrl, final SyndFeedInfo syndFeedInfo, final HttpURLConnection connection)
|
||||||
|
throws IllegalArgumentException, FeedException, FetcherException, IOException {
|
||||||
handleErrorCodes(connection.getResponseCode());
|
handleErrorCodes(connection.getResponseCode());
|
||||||
|
|
||||||
resetFeedInfo(feedUrl, syndFeedInfo, connection);
|
resetFeedInfo(feedUrl, syndFeedInfo, connection);
|
||||||
FeedFetcherCache cache = getFeedInfoCache();
|
final FeedFetcherCache cache = getFeedInfoCache();
|
||||||
// resetting feed info in the cache
|
// resetting feed info in the cache
|
||||||
// could be needed for some implementations
|
// could be needed for some implementations
|
||||||
// of FeedFetcherCache (eg, distributed HashTables)
|
// of FeedFetcherCache (eg, distributed HashTables)
|
||||||
|
@ -177,7 +188,8 @@ public class HttpURLFeedFetcher extends AbstractFeedFetcher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void resetFeedInfo(URL orignalUrl, SyndFeedInfo syndFeedInfo, HttpURLConnection connection) throws IllegalArgumentException, IOException, FeedException {
|
protected void resetFeedInfo(final URL orignalUrl, final SyndFeedInfo syndFeedInfo, final HttpURLConnection connection) throws IllegalArgumentException,
|
||||||
|
IOException, FeedException {
|
||||||
// need to always set the URL because this may have changed due to 3xx redirects
|
// need to always set the URL because this may have changed due to 3xx redirects
|
||||||
syndFeedInfo.setUrl(connection.getURL());
|
syndFeedInfo.setUrl(connection.getURL());
|
||||||
|
|
||||||
|
@ -197,15 +209,15 @@ public class HttpURLFeedFetcher extends AbstractFeedFetcher {
|
||||||
inputStream = connection.getInputStream();
|
inputStream = connection.getInputStream();
|
||||||
SyndFeed syndFeed = getSyndFeedFromStream(inputStream, connection);
|
SyndFeed syndFeed = getSyndFeedFromStream(inputStream, connection);
|
||||||
|
|
||||||
String imHeader = connection.getHeaderField("IM");
|
final String imHeader = connection.getHeaderField("IM");
|
||||||
if (isUsingDeltaEncoding() && (imHeader!= null && imHeader.indexOf("feed") >= 0)) {
|
if (isUsingDeltaEncoding() && imHeader != null && imHeader.indexOf("feed") >= 0) {
|
||||||
FeedFetcherCache cache = getFeedInfoCache();
|
final FeedFetcherCache cache = getFeedInfoCache();
|
||||||
if (cache != null && connection.getResponseCode() == 226) {
|
if (cache != null && connection.getResponseCode() == 226) {
|
||||||
// client is setup to use http delta encoding and the server supports it and has returned a delta encoded response
|
// client is setup to use http delta encoding and the server supports it and has returned a delta encoded response
|
||||||
// This response only includes new items
|
// This response only includes new items
|
||||||
SyndFeedInfo cachedInfo = cache.getFeedInfo(orignalUrl);
|
final SyndFeedInfo cachedInfo = cache.getFeedInfo(orignalUrl);
|
||||||
if (cachedInfo != null) {
|
if (cachedInfo != null) {
|
||||||
SyndFeed cachedFeed = cachedInfo.getSyndFeed();
|
final SyndFeed cachedFeed = cachedInfo.getSyndFeed();
|
||||||
|
|
||||||
// set the new feed to be the orginal feed plus the new items
|
// set the new feed to be the orginal feed plus the new items
|
||||||
syndFeed = combineFeeds(cachedFeed, syndFeed);
|
syndFeed = combineFeeds(cachedFeed, syndFeed);
|
||||||
|
@ -222,17 +234,19 @@ public class HttpURLFeedFetcher extends AbstractFeedFetcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Set appropriate HTTP headers, including conditional get and gzip encoding headers</p>
|
* <p>
|
||||||
|
* Set appropriate HTTP headers, including conditional get and gzip encoding headers
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @param connection A URLConnection
|
* @param connection A URLConnection
|
||||||
* @param syndFeedInfo The SyndFeedInfo for the feed to be retrieved. May be null
|
* @param syndFeedInfo The SyndFeedInfo for the feed to be retrieved. May be null
|
||||||
*/
|
*/
|
||||||
protected void setRequestHeaders(URLConnection connection, SyndFeedInfo syndFeedInfo) {
|
protected void setRequestHeaders(final URLConnection connection, final SyndFeedInfo syndFeedInfo) {
|
||||||
if (syndFeedInfo != null) {
|
if (syndFeedInfo != null) {
|
||||||
// set the headers to get feed only if modified
|
// set the headers to get feed only if modified
|
||||||
// we support the use of both last modified and eTag headers
|
// we support the use of both last modified and eTag headers
|
||||||
if (syndFeedInfo.getLastModified() != null) {
|
if (syndFeedInfo.getLastModified() != null) {
|
||||||
Object lastModified = syndFeedInfo.getLastModified();
|
final Object lastModified = syndFeedInfo.getLastModified();
|
||||||
if (lastModified instanceof Long) {
|
if (lastModified instanceof Long) {
|
||||||
connection.setIfModifiedSince(((Long) syndFeedInfo.getLastModified()).longValue());
|
connection.setIfModifiedSince(((Long) syndFeedInfo.getLastModified()).longValue());
|
||||||
}
|
}
|
||||||
|
@ -250,7 +264,8 @@ public class HttpURLFeedFetcher extends AbstractFeedFetcher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private SyndFeed readSyndFeedFromStream(InputStream inputStream, URLConnection connection) throws IOException, IllegalArgumentException, FeedException {
|
private SyndFeed readSyndFeedFromStream(final InputStream inputStream, final URLConnection connection) throws IOException, IllegalArgumentException,
|
||||||
|
FeedException {
|
||||||
BufferedInputStream is;
|
BufferedInputStream is;
|
||||||
if ("gzip".equalsIgnoreCase(connection.getContentEncoding())) {
|
if ("gzip".equalsIgnoreCase(connection.getContentEncoding())) {
|
||||||
// handle gzip encoded content
|
// handle gzip encoded content
|
||||||
|
@ -270,15 +285,16 @@ public class HttpURLFeedFetcher extends AbstractFeedFetcher {
|
||||||
reader = new XmlReader(is, true);
|
reader = new XmlReader(is, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
SyndFeedInput syndFeedInput = new SyndFeedInput();
|
final SyndFeedInput syndFeedInput = new SyndFeedInput();
|
||||||
syndFeedInput.setPreserveWireFeed(isPreserveWireFeed());
|
syndFeedInput.setPreserveWireFeed(isPreserveWireFeed());
|
||||||
|
|
||||||
return syndFeedInput.build(reader);
|
return syndFeedInput.build(reader);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private SyndFeed getSyndFeedFromStream(InputStream inputStream, URLConnection connection) throws IOException, IllegalArgumentException, FeedException {
|
private SyndFeed getSyndFeedFromStream(final InputStream inputStream, final URLConnection connection) throws IOException, IllegalArgumentException,
|
||||||
SyndFeed feed = readSyndFeedFromStream(inputStream, connection);
|
FeedException {
|
||||||
|
final SyndFeed feed = readSyndFeedFromStream(inputStream, connection);
|
||||||
fireEvent(FetcherEvent.EVENT_TYPE_FEED_RETRIEVED, connection, feed);
|
fireEvent(FetcherEvent.EVENT_TYPE_FEED_RETRIEVED, connection, feed);
|
||||||
return feed;
|
return feed;
|
||||||
}
|
}
|
||||||
|
@ -293,7 +309,7 @@ public class HttpURLFeedFetcher extends AbstractFeedFetcher {
|
||||||
/**
|
/**
|
||||||
* @param cache The cache to be used by this fetcher (pass null to stop using a cache)
|
* @param cache The cache to be used by this fetcher (pass null to stop using a cache)
|
||||||
*/
|
*/
|
||||||
public synchronized void setFeedInfoCache(FeedFetcherCache cache) {
|
public synchronized void setFeedInfoCache(final FeedFetcherCache cache) {
|
||||||
feedInfoCache = cache;
|
feedInfoCache = cache;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,13 @@ import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>An implementation of the {@link org.rometools.fetcher.impl.FeedFetcherCache} interface.</p>
|
* <p>
|
||||||
|
* An implementation of the {@link org.rometools.fetcher.impl.FeedFetcherCache} interface.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>Unlike the HashMapFeedInfoCache this implementation will not grow unbound</p>
|
* <p>
|
||||||
|
* Unlike the HashMapFeedInfoCache this implementation will not grow unbound
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @author Javier Kohen
|
* @author Javier Kohen
|
||||||
* @author Nick Lothian
|
* @author Nick Lothian
|
||||||
|
@ -21,7 +25,8 @@ public class LinkedHashMapFeedInfoCache extends HashMapFeedInfoCache {
|
||||||
super(16, 0.75F, true);
|
super(16, 0.75F, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean removeEldestEntry(Map.Entry eldest) {
|
@Override
|
||||||
|
protected boolean removeEldestEntry(final Map.Entry eldest) {
|
||||||
return size() > getMaxEntries();
|
return size() > getMaxEntries();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,9 +39,9 @@ public class LinkedHashMapFeedInfoCache extends HashMapFeedInfoCache {
|
||||||
|
|
||||||
private final static LinkedHashMapFeedInfoCache _instance = new LinkedHashMapFeedInfoCache();
|
private final static LinkedHashMapFeedInfoCache _instance = new LinkedHashMapFeedInfoCache();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the global instance of the cache
|
* Get the global instance of the cache
|
||||||
|
*
|
||||||
* @return an implementation of FeedFetcherCache
|
* @return an implementation of FeedFetcherCache
|
||||||
*/
|
*/
|
||||||
public static final FeedFetcherCache getInstance() {
|
public static final FeedFetcherCache getInstance() {
|
||||||
|
@ -44,10 +49,13 @@ public class LinkedHashMapFeedInfoCache extends HashMapFeedInfoCache {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for HashMapFeedInfoCache</p>
|
* <p>
|
||||||
|
* Constructor for HashMapFeedInfoCache
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>Only use this if you want multiple instances of the cache.
|
* <p>
|
||||||
* Usually {@link #getInstance()} is more appropriate.</p>
|
* Only use this if you want multiple instances of the cache. Usually {@link #getInstance()} is more appropriate.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @see #getInstance()
|
* @see #getInstance()
|
||||||
*/
|
*/
|
||||||
|
@ -55,6 +63,7 @@ public class LinkedHashMapFeedInfoCache extends HashMapFeedInfoCache {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected Map createInfoCache() {
|
protected Map createInfoCache() {
|
||||||
return Collections.synchronizedMap(new CacheImpl());
|
return Collections.synchronizedMap(new CacheImpl());
|
||||||
}
|
}
|
||||||
|
@ -63,7 +72,7 @@ public class LinkedHashMapFeedInfoCache extends HashMapFeedInfoCache {
|
||||||
return maxEntries;
|
return maxEntries;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized final void setMaxEntries(int maxEntries) {
|
public synchronized final void setMaxEntries(final int maxEntries) {
|
||||||
this.maxEntries = maxEntries;
|
this.maxEntries = maxEntries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,24 +29,25 @@ public class ResponseHandler {
|
||||||
|
|
||||||
private final static Pattern characterEncodingPattern = Pattern.compile("charset=([.[^; ]]*)");
|
private final static Pattern characterEncodingPattern = Pattern.compile("charset=([.[^; ]]*)");
|
||||||
|
|
||||||
public static String getCharacterEncoding(URLConnection connection) {
|
public static String getCharacterEncoding(final URLConnection connection) {
|
||||||
return getCharacterEncoding(connection.getContentType());
|
return getCharacterEncoding(connection.getContentType());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* <p>Gets the character encoding of a response. (Note that this is different to
|
* <p>
|
||||||
* the content-encoding)</p>
|
* Gets the character encoding of a response. (Note that this is different to the content-encoding)
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @param contentTypeHeader the value of the content-type HTTP header eg: text/html; charset=ISO-8859-4
|
* @param contentTypeHeader the value of the content-type HTTP header eg: text/html; charset=ISO-8859-4
|
||||||
* @return the character encoding, eg: ISO-8859-4
|
* @return the character encoding, eg: ISO-8859-4
|
||||||
*/
|
*/
|
||||||
public static String getCharacterEncoding(String contentTypeHeader) {
|
public static String getCharacterEncoding(final String contentTypeHeader) {
|
||||||
if (contentTypeHeader == null) {
|
if (contentTypeHeader == null) {
|
||||||
return defaultCharacterEncoding;
|
return defaultCharacterEncoding;
|
||||||
}
|
}
|
||||||
|
|
||||||
Matcher m = characterEncodingPattern.matcher(contentTypeHeader);
|
final Matcher m = characterEncodingPattern.matcher(contentTypeHeader);
|
||||||
// if (!m.matches()) {
|
// if (!m.matches()) {
|
||||||
if (!m.find()) {
|
if (!m.find()) {
|
||||||
return defaultCharacterEncoding;
|
return defaultCharacterEncoding;
|
||||||
|
|
|
@ -23,11 +23,13 @@ import com.sun.syndication.feed.impl.ObjectBean;
|
||||||
import com.sun.syndication.feed.synd.SyndFeed;
|
import com.sun.syndication.feed.synd.SyndFeed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>A class to represent a {@link com.sun.syndication.feed.synd.SyndFeed}
|
* <p>
|
||||||
* and some useful information about it.</p>
|
* A class to represent a {@link com.sun.syndication.feed.synd.SyndFeed} and some useful information about it.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>This class is thread safe, as expected by the different feed fetcher
|
* <p>
|
||||||
* implementations.</p>
|
* This class is thread safe, as expected by the different feed fetcher implementations.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @author Nick Lothian
|
* @author Nick Lothian
|
||||||
*/
|
*/
|
||||||
|
@ -48,10 +50,12 @@ public class SyndFeedInfo implements Cloneable, Serializable {
|
||||||
/**
|
/**
|
||||||
* Creates a deep 'bean' clone of the object.
|
* Creates a deep 'bean' clone of the object.
|
||||||
* <p>
|
* <p>
|
||||||
|
*
|
||||||
* @return a clone of the object.
|
* @return a clone of the object.
|
||||||
* @throws CloneNotSupportedException thrown if an element of the object cannot be cloned.
|
* @throws CloneNotSupportedException thrown if an element of the object cannot be cloned.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public Object clone() throws CloneNotSupportedException {
|
public Object clone() throws CloneNotSupportedException {
|
||||||
return _objBean.clone();
|
return _objBean.clone();
|
||||||
}
|
}
|
||||||
|
@ -59,11 +63,13 @@ public class SyndFeedInfo implements Cloneable, Serializable {
|
||||||
/**
|
/**
|
||||||
* Indicates whether some other object is "equal to" this one as defined by the Object equals() method.
|
* Indicates whether some other object is "equal to" this one as defined by the Object equals() method.
|
||||||
* <p>
|
* <p>
|
||||||
|
*
|
||||||
* @param other he reference object with which to compare.
|
* @param other he reference object with which to compare.
|
||||||
* @return <b>true</b> if 'this' object is equal to the 'other' object.
|
* @return <b>true</b> if 'this' object is equal to the 'other' object.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public boolean equals(Object other) {
|
@Override
|
||||||
|
public boolean equals(final Object other) {
|
||||||
return _objBean.equals(other);
|
return _objBean.equals(other);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,9 +78,11 @@ public class SyndFeedInfo implements Cloneable, Serializable {
|
||||||
* <p>
|
* <p>
|
||||||
* It follows the contract defined by the Object hashCode() method.
|
* It follows the contract defined by the Object hashCode() method.
|
||||||
* <p>
|
* <p>
|
||||||
|
*
|
||||||
* @return the hashcode of the bean object.
|
* @return the hashcode of the bean object.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return _objBean.hashCode();
|
return _objBean.hashCode();
|
||||||
}
|
}
|
||||||
|
@ -82,14 +90,15 @@ public class SyndFeedInfo implements Cloneable, Serializable {
|
||||||
/**
|
/**
|
||||||
* Returns the String representation for the object.
|
* Returns the String representation for the object.
|
||||||
* <p>
|
* <p>
|
||||||
|
*
|
||||||
* @return String representation for the object.
|
* @return String representation for the object.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return _objBean.toString();
|
return _objBean.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the ETag the feed was last retrieved with
|
* @return the ETag the feed was last retrieved with
|
||||||
*/
|
*/
|
||||||
|
@ -111,15 +120,15 @@ public class SyndFeedInfo implements Cloneable, Serializable {
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void setETag(String string) {
|
public synchronized void setETag(final String string) {
|
||||||
eTag = string;
|
eTag = string;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void setLastModified(Object o) {
|
public synchronized void setLastModified(final Object o) {
|
||||||
lastModified = o;
|
lastModified = o;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void setUrl(URL url) {
|
public synchronized void setUrl(final URL url) {
|
||||||
this.url = url;
|
this.url = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,7 +136,7 @@ public class SyndFeedInfo implements Cloneable, Serializable {
|
||||||
return syndFeed;
|
return syndFeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void setSyndFeed(SyndFeed feed) {
|
public synchronized void setSyndFeed(final SyndFeed feed) {
|
||||||
syndFeed = feed;
|
syndFeed = feed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,10 +148,9 @@ public class SyndFeedInfo implements Cloneable, Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string A unique ID to identify the feed. Note that if the URL of the feed
|
* @param string A unique ID to identify the feed. Note that if the URL of the feed changes this will remain the same
|
||||||
* changes this will remain the same
|
|
||||||
*/
|
*/
|
||||||
public synchronized void setId(String string) {
|
public synchronized void setId(final String string) {
|
||||||
id = string;
|
id = string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,19 +21,23 @@ import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.sun.syndication.feed.synd.SyndFeedImpl;
|
|
||||||
import com.sun.syndication.feed.synd.SyndFeed;
|
|
||||||
import org.rometools.fetcher.FeedFetcher;
|
import org.rometools.fetcher.FeedFetcher;
|
||||||
import org.rometools.fetcher.impl.FeedFetcherCache;
|
import org.rometools.fetcher.impl.FeedFetcherCache;
|
||||||
import org.rometools.fetcher.impl.HashMapFeedInfoCache;
|
import org.rometools.fetcher.impl.HashMapFeedInfoCache;
|
||||||
import org.rometools.fetcher.impl.HttpURLFeedFetcher;
|
import org.rometools.fetcher.impl.HttpURLFeedFetcher;
|
||||||
|
|
||||||
|
import com.sun.syndication.feed.synd.SyndFeed;
|
||||||
|
import com.sun.syndication.feed.synd.SyndFeedImpl;
|
||||||
import com.sun.syndication.io.SyndFeedOutput;
|
import com.sun.syndication.io.SyndFeedOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>It aggregates a list of RSS/Atom feeds (they can be of different types)
|
* <p>
|
||||||
* into a single feed of the specified type.</p>
|
* It aggregates a list of RSS/Atom feeds (they can be of different types) into a single feed of the specified type.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>Converted from the original FeedAggregator sample</p>
|
* <p>
|
||||||
|
* Converted from the original FeedAggregator sample
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @author Alejandro Abdelnur
|
* @author Alejandro Abdelnur
|
||||||
* @author Nick Lothian
|
* @author Nick Lothian
|
||||||
|
@ -41,13 +45,13 @@ import com.sun.syndication.io.SyndFeedOutput;
|
||||||
*/
|
*/
|
||||||
public class FeedAggregator {
|
public class FeedAggregator {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(final String[] args) {
|
||||||
boolean ok = false;
|
boolean ok = false;
|
||||||
if (args.length >= 2) {
|
if (args.length >= 2) {
|
||||||
try {
|
try {
|
||||||
String outputType = args[0];
|
final String outputType = args[0];
|
||||||
|
|
||||||
SyndFeed feed = new SyndFeedImpl();
|
final SyndFeed feed = new SyndFeedImpl();
|
||||||
feed.setFeedType(outputType);
|
feed.setFeedType(outputType);
|
||||||
|
|
||||||
feed.setTitle("Aggregated Feed");
|
feed.setTitle("Aggregated Feed");
|
||||||
|
@ -55,24 +59,23 @@ public class FeedAggregator {
|
||||||
feed.setAuthor("anonymous");
|
feed.setAuthor("anonymous");
|
||||||
feed.setLink("http://www.anonymous.com");
|
feed.setLink("http://www.anonymous.com");
|
||||||
|
|
||||||
List entries = new ArrayList();
|
final List entries = new ArrayList();
|
||||||
feed.setEntries(entries);
|
feed.setEntries(entries);
|
||||||
|
|
||||||
FeedFetcherCache feedInfoCache = HashMapFeedInfoCache.getInstance();
|
final FeedFetcherCache feedInfoCache = HashMapFeedInfoCache.getInstance();
|
||||||
FeedFetcher feedFetcher = new HttpURLFeedFetcher(feedInfoCache);
|
final FeedFetcher feedFetcher = new HttpURLFeedFetcher(feedInfoCache);
|
||||||
|
|
||||||
for (int i = 1; i < args.length; i++) {
|
for (int i = 1; i < args.length; i++) {
|
||||||
URL inputUrl = new URL(args[i]);
|
final URL inputUrl = new URL(args[i]);
|
||||||
SyndFeed inFeed = feedFetcher.retrieveFeed(inputUrl);
|
final SyndFeed inFeed = feedFetcher.retrieveFeed(inputUrl);
|
||||||
entries.addAll(inFeed.getEntries());
|
entries.addAll(inFeed.getEntries());
|
||||||
}
|
}
|
||||||
|
|
||||||
SyndFeedOutput output = new SyndFeedOutput();
|
final SyndFeedOutput output = new SyndFeedOutput();
|
||||||
output.output(feed, new PrintWriter(System.out));
|
output.output(feed, new PrintWriter(System.out));
|
||||||
|
|
||||||
ok = true;
|
ok = true;
|
||||||
}
|
} catch (final Exception ex) {
|
||||||
catch (Exception ex) {
|
|
||||||
System.out.println("ERROR: " + ex.getMessage());
|
System.out.println("ERROR: " + ex.getMessage());
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,33 +16,36 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.rometools.fetcher.samples;
|
package org.rometools.fetcher.samples;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
|
||||||
import com.sun.syndication.feed.synd.SyndFeed;
|
|
||||||
import org.rometools.fetcher.FeedFetcher;
|
import org.rometools.fetcher.FeedFetcher;
|
||||||
import org.rometools.fetcher.FetcherEvent;
|
import org.rometools.fetcher.FetcherEvent;
|
||||||
import org.rometools.fetcher.FetcherListener;
|
import org.rometools.fetcher.FetcherListener;
|
||||||
import org.rometools.fetcher.impl.FeedFetcherCache;
|
import org.rometools.fetcher.impl.FeedFetcherCache;
|
||||||
import org.rometools.fetcher.impl.HashMapFeedInfoCache;
|
import org.rometools.fetcher.impl.HashMapFeedInfoCache;
|
||||||
import org.rometools.fetcher.impl.HttpURLFeedFetcher;
|
import org.rometools.fetcher.impl.HttpURLFeedFetcher;
|
||||||
|
|
||||||
|
import com.sun.syndication.feed.synd.SyndFeed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads and prints any RSS/Atom feed type. Converted from the
|
* Reads and prints any RSS/Atom feed type. Converted from the original Rome sample FeedReader
|
||||||
* original Rome sample FeedReader
|
|
||||||
* <p>
|
* <p>
|
||||||
|
*
|
||||||
* @author Alejandro Abdelnur
|
* @author Alejandro Abdelnur
|
||||||
* @author Nick Lothian
|
* @author Nick Lothian
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class FeedReader {
|
public class FeedReader {
|
||||||
public static void main(String[] args) {
|
public static void main(final String[] args) {
|
||||||
boolean ok = false;
|
boolean ok = false;
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
try {
|
try {
|
||||||
URL feedUrl = new URL(args[0]);
|
final URL feedUrl = new URL(args[0]);
|
||||||
FeedFetcherCache feedInfoCache = HashMapFeedInfoCache.getInstance();
|
final FeedFetcherCache feedInfoCache = HashMapFeedInfoCache.getInstance();
|
||||||
FeedFetcher fetcher = new HttpURLFeedFetcher(feedInfoCache);
|
final FeedFetcher fetcher = new HttpURLFeedFetcher(feedInfoCache);
|
||||||
|
|
||||||
FetcherEventListenerImpl listener = new FetcherEventListenerImpl();
|
final FetcherEventListenerImpl listener = new FetcherEventListenerImpl();
|
||||||
|
|
||||||
fetcher.addFetcherEventListener(listener);
|
fetcher.addFetcherEventListener(listener);
|
||||||
|
|
||||||
|
@ -50,7 +53,7 @@ public class FeedReader {
|
||||||
// Retrieve the feed.
|
// Retrieve the feed.
|
||||||
// We will get a Feed Polled Event and then a
|
// We will get a Feed Polled Event and then a
|
||||||
// Feed Retrieved event (assuming the feed is valid)
|
// Feed Retrieved event (assuming the feed is valid)
|
||||||
SyndFeed feed = fetcher.retrieveFeed(feedUrl);
|
final SyndFeed feed = fetcher.retrieveFeed(feedUrl);
|
||||||
|
|
||||||
System.err.println(feedUrl + " retrieved");
|
System.err.println(feedUrl + " retrieved");
|
||||||
System.err.println(feedUrl + " has a title: " + feed.getTitle() + " and contains " + feed.getEntries().size() + " entries.");
|
System.err.println(feedUrl + " has a title: " + feed.getTitle() + " and contains " + feed.getEntries().size() + " entries.");
|
||||||
|
@ -58,12 +61,11 @@ public class FeedReader {
|
||||||
// and the server supports conditional gets, we will get a "Feed
|
// and the server supports conditional gets, we will get a "Feed
|
||||||
// Unchanged" event after the Feed Polled event
|
// Unchanged" event after the Feed Polled event
|
||||||
System.err.println("Polling " + feedUrl + " again to test conditional get support.");
|
System.err.println("Polling " + feedUrl + " again to test conditional get support.");
|
||||||
SyndFeed feed2 = fetcher.retrieveFeed(feedUrl);
|
final SyndFeed feed2 = fetcher.retrieveFeed(feedUrl);
|
||||||
System.err.println("If a \"Feed Unchanged\" event fired then the server supports conditional gets.");
|
System.err.println("If a \"Feed Unchanged\" event fired then the server supports conditional gets.");
|
||||||
|
|
||||||
ok = true;
|
ok = true;
|
||||||
}
|
} catch (final Exception ex) {
|
||||||
catch (Exception ex) {
|
|
||||||
System.out.println("ERROR: " + ex.getMessage());
|
System.out.println("ERROR: " + ex.getMessage());
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -82,8 +84,9 @@ public class FeedReader {
|
||||||
/**
|
/**
|
||||||
* @see com.sun.syndication.fetcher.FetcherListener#fetcherEvent(com.sun.syndication.fetcher.FetcherEvent)
|
* @see com.sun.syndication.fetcher.FetcherListener#fetcherEvent(com.sun.syndication.fetcher.FetcherEvent)
|
||||||
*/
|
*/
|
||||||
public void fetcherEvent(FetcherEvent event) {
|
@Override
|
||||||
String eventType = event.getEventType();
|
public void fetcherEvent(final FetcherEvent event) {
|
||||||
|
final String eventType = event.getEventType();
|
||||||
if (FetcherEvent.EVENT_TYPE_FEED_POLLED.equals(eventType)) {
|
if (FetcherEvent.EVENT_TYPE_FEED_POLLED.equals(eventType)) {
|
||||||
System.err.println("\tEVENT: Feed Polled. URL = " + event.getUrlString());
|
System.err.println("\tEVENT: Feed Polled. URL = " + event.getUrlString());
|
||||||
} else if (FetcherEvent.EVENT_TYPE_FEED_RETRIEVED.equals(eventType)) {
|
} else if (FetcherEvent.EVENT_TYPE_FEED_RETRIEVED.equals(eventType)) {
|
||||||
|
|
1
src/main/resources/.gitignore
vendored
Normal file
1
src/main/resources/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
# needed to commit empty folder
|
|
@ -16,8 +16,6 @@
|
||||||
*/
|
*/
|
||||||
package org.rometools.test;
|
package org.rometools.test;
|
||||||
|
|
||||||
import org.rometools.fetcher.impl.HashMapFeedInfoCache;
|
|
||||||
import org.rometools.fetcher.impl.FeedFetcherCache;
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
@ -31,14 +29,16 @@ import org.mortbay.http.SocketListener;
|
||||||
import org.mortbay.http.UserRealm;
|
import org.mortbay.http.UserRealm;
|
||||||
import org.mortbay.http.handler.SecurityHandler;
|
import org.mortbay.http.handler.SecurityHandler;
|
||||||
import org.mortbay.jetty.servlet.ServletHandler;
|
import org.mortbay.jetty.servlet.ServletHandler;
|
||||||
|
|
||||||
import com.sun.syndication.feed.atom.Entry;
|
|
||||||
import com.sun.syndication.feed.synd.SyndEntry;
|
|
||||||
import com.sun.syndication.feed.synd.SyndFeed;
|
|
||||||
import org.rometools.fetcher.FeedFetcher;
|
import org.rometools.fetcher.FeedFetcher;
|
||||||
import org.rometools.fetcher.FetcherEvent;
|
import org.rometools.fetcher.FetcherEvent;
|
||||||
import org.rometools.fetcher.FetcherException;
|
import org.rometools.fetcher.FetcherException;
|
||||||
import org.rometools.fetcher.FetcherListener;
|
import org.rometools.fetcher.FetcherListener;
|
||||||
|
import org.rometools.fetcher.impl.FeedFetcherCache;
|
||||||
|
import org.rometools.fetcher.impl.HashMapFeedInfoCache;
|
||||||
|
|
||||||
|
import com.sun.syndication.feed.atom.Entry;
|
||||||
|
import com.sun.syndication.feed.synd.SyndEntry;
|
||||||
|
import com.sun.syndication.feed.synd.SyndFeed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author nl
|
* @author nl
|
||||||
|
@ -46,12 +46,12 @@ import org.rometools.fetcher.FetcherListener;
|
||||||
public abstract class AbstractJettyTest extends TestCase {
|
public abstract class AbstractJettyTest extends TestCase {
|
||||||
|
|
||||||
private HttpServer server;
|
private HttpServer server;
|
||||||
private int testPort = 8283;
|
private final int testPort = 8283;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param s
|
* @param s
|
||||||
*/
|
*/
|
||||||
public AbstractJettyTest(String s) {
|
public AbstractJettyTest(final String s) {
|
||||||
super(s);
|
super(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,12 +66,13 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
/**
|
/**
|
||||||
* @see junit.framework.TestCase#setUp()
|
* @see junit.framework.TestCase#setUp()
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
setupServer();
|
setupServer();
|
||||||
|
|
||||||
HttpContext context = createContext();
|
final HttpContext context = createContext();
|
||||||
|
|
||||||
ServletHandler servlets = createServletHandler();
|
final ServletHandler servlets = createServletHandler();
|
||||||
context.addHandler(servlets);
|
context.addHandler(servlets);
|
||||||
|
|
||||||
server.addContext(context);
|
server.addContext(context);
|
||||||
|
@ -91,7 +92,7 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
server = new HttpServer();
|
server = new HttpServer();
|
||||||
|
|
||||||
// Create a port listener
|
// Create a port listener
|
||||||
SocketListener listener=new SocketListener();
|
final SocketListener listener = new SocketListener();
|
||||||
listener.setPort(testPort);
|
listener.setPort(testPort);
|
||||||
server.addListener(listener);
|
server.addListener(listener);
|
||||||
}
|
}
|
||||||
|
@ -100,7 +101,7 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private ServletHandler createServletHandler() {
|
private ServletHandler createServletHandler() {
|
||||||
ServletHandler servlets = new ServletHandler();
|
final ServletHandler servlets = new ServletHandler();
|
||||||
servlets.addServlet("FetcherTestServlet", FetcherTestServlet.SERVLET_MAPPING, "org.rometools.test.FetcherTestServlet");
|
servlets.addServlet("FetcherTestServlet", FetcherTestServlet.SERVLET_MAPPING, "org.rometools.test.FetcherTestServlet");
|
||||||
servlets.addServlet("FetcherTestServlet", FetcherTestServlet.SERVLET_MAPPING2, "org.rometools.test.FetcherTestServlet");
|
servlets.addServlet("FetcherTestServlet", FetcherTestServlet.SERVLET_MAPPING2, "org.rometools.test.FetcherTestServlet");
|
||||||
return servlets;
|
return servlets;
|
||||||
|
@ -110,7 +111,7 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private HttpContext createContext() {
|
private HttpContext createContext() {
|
||||||
HttpContext context = new HttpContext();
|
final HttpContext context = new HttpContext();
|
||||||
context.setContextPath("/rome/*");
|
context.setContextPath("/rome/*");
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
@ -118,6 +119,7 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
/**
|
/**
|
||||||
* @see junit.framework.TestCase#tearDown()
|
* @see junit.framework.TestCase#tearDown()
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected void tearDown() throws Exception {
|
protected void tearDown() throws Exception {
|
||||||
if (server != null) {
|
if (server != null) {
|
||||||
server.stop();
|
server.stop();
|
||||||
|
@ -140,8 +142,9 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
/**
|
/**
|
||||||
* @see com.sun.syndication.fetcher.FetcherListener#fetcherEvent(com.sun.syndication.fetcher.FetcherEvent)
|
* @see com.sun.syndication.fetcher.FetcherListener#fetcherEvent(com.sun.syndication.fetcher.FetcherEvent)
|
||||||
*/
|
*/
|
||||||
public void fetcherEvent(FetcherEvent event) {
|
@Override
|
||||||
String eventType = event.getEventType();
|
public void fetcherEvent(final FetcherEvent event) {
|
||||||
|
final String eventType = event.getEventType();
|
||||||
if (FetcherEvent.EVENT_TYPE_FEED_POLLED.equals(eventType)) {
|
if (FetcherEvent.EVENT_TYPE_FEED_POLLED.equals(eventType)) {
|
||||||
System.err.println("\tEVENT: Feed Polled. URL = " + event.getUrlString());
|
System.err.println("\tEVENT: Feed Polled. URL = " + event.getUrlString());
|
||||||
polled = true;
|
polled = true;
|
||||||
|
@ -156,12 +159,12 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testRetrieveFeed() {
|
public void testRetrieveFeed() {
|
||||||
FeedFetcher feedFetcher = getFeedFetcher();
|
final FeedFetcher feedFetcher = getFeedFetcher();
|
||||||
try {
|
try {
|
||||||
SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:"+testPort+"/rome/FetcherTestServlet/"));
|
final SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort + "/rome/FetcherTestServlet/"));
|
||||||
assertNotNull(feed);
|
assertNotNull(feed);
|
||||||
assertEquals("atom_1.0.feed.title", feed.getTitle());
|
assertEquals("atom_1.0.feed.title", feed.getTitle());
|
||||||
} catch (Exception e) {
|
} catch (final Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
fail(e.getMessage());
|
fail(e.getMessage());
|
||||||
}
|
}
|
||||||
|
@ -171,43 +174,41 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
try {
|
try {
|
||||||
setupServer();
|
setupServer();
|
||||||
|
|
||||||
HttpContext context = createContext();
|
final HttpContext context = createContext();
|
||||||
|
|
||||||
URL url = this.getClass().getResource("/testuser.properties");
|
final URL url = this.getClass().getResource("/testuser.properties");
|
||||||
UserRealm ur = new HashUserRealm("test", url.getFile());
|
final UserRealm ur = new HashUserRealm("test", url.getFile());
|
||||||
context.setRealm(ur);
|
context.setRealm(ur);
|
||||||
|
|
||||||
BasicAuthenticator ba = new BasicAuthenticator();
|
final BasicAuthenticator ba = new BasicAuthenticator();
|
||||||
context.setAuthenticator(ba);
|
context.setAuthenticator(ba);
|
||||||
|
|
||||||
SecurityHandler sh = new SecurityHandler();
|
final SecurityHandler sh = new SecurityHandler();
|
||||||
context.addHandler(sh);
|
context.addHandler(sh);
|
||||||
|
|
||||||
SecurityConstraint sc = new SecurityConstraint();
|
final SecurityConstraint sc = new SecurityConstraint();
|
||||||
sc.setName("test");
|
sc.setName("test");
|
||||||
sc.addRole("*");
|
sc.addRole("*");
|
||||||
sc.setAuthenticate(true);
|
sc.setAuthenticate(true);
|
||||||
context.addSecurityConstraint("/", sc);
|
context.addSecurityConstraint("/", sc);
|
||||||
|
|
||||||
ServletHandler servlets = createServletHandler();
|
final ServletHandler servlets = createServletHandler();
|
||||||
context.addHandler(servlets);
|
context.addHandler(servlets);
|
||||||
|
|
||||||
server.addContext(context);
|
server.addContext(context);
|
||||||
|
|
||||||
server.start();
|
server.start();
|
||||||
|
|
||||||
FeedFetcher feedFetcher = getAuthenticatedFeedFetcher();
|
final FeedFetcher feedFetcher = getAuthenticatedFeedFetcher();
|
||||||
SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:"+testPort+"/rome/FetcherTestServlet/"));
|
final SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort + "/rome/FetcherTestServlet/"));
|
||||||
assertNotNull(feed);
|
assertNotNull(feed);
|
||||||
assertEquals("atom_1.0.feed.title", feed.getTitle());
|
assertEquals("atom_1.0.feed.title", feed.getTitle());
|
||||||
|
|
||||||
|
} catch (final Exception e) {
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
fail(e.getMessage());
|
fail(e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract FeedFetcher getAuthenticatedFeedFetcher();
|
public abstract FeedFetcher getAuthenticatedFeedFetcher();
|
||||||
|
@ -217,12 +218,12 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void testRetrieveRedirectedFeed() {
|
public void testRetrieveRedirectedFeed() {
|
||||||
FeedFetcher feedFetcher = getFeedFetcher();
|
final FeedFetcher feedFetcher = getFeedFetcher();
|
||||||
try {
|
try {
|
||||||
SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:"+testPort+"/rome/FetcherTestServlet?redirect=TRUE"));
|
final SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort + "/rome/FetcherTestServlet?redirect=TRUE"));
|
||||||
assertNotNull(feed);
|
assertNotNull(feed);
|
||||||
assertEquals("atom_1.0.feed.title", feed.getTitle());
|
assertEquals("atom_1.0.feed.title", feed.getTitle());
|
||||||
} catch (Exception e) {
|
} catch (final Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
fail(e.getMessage());
|
fail(e.getMessage());
|
||||||
}
|
}
|
||||||
|
@ -233,32 +234,32 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void testErrorHandling() {
|
public void testErrorHandling() {
|
||||||
FeedFetcher feedFetcher = getFeedFetcher();
|
final FeedFetcher feedFetcher = getFeedFetcher();
|
||||||
try {
|
try {
|
||||||
SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:"+testPort+"/rome/FetcherTestServlet?error=404"));
|
final SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort + "/rome/FetcherTestServlet?error=404"));
|
||||||
fail("4xx error handling did not work correctly");
|
fail("4xx error handling did not work correctly");
|
||||||
} catch (FetcherException e) {
|
} catch (final FetcherException e) {
|
||||||
// expect this exception
|
// expect this exception
|
||||||
assertEquals(404, e.getResponseCode());
|
assertEquals(404, e.getResponseCode());
|
||||||
} catch (Exception e) {
|
} catch (final Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
fail(e.getMessage());
|
fail(e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:"+testPort+"/rome/FetcherTestServlet?error=500"));
|
final SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort + "/rome/FetcherTestServlet?error=500"));
|
||||||
fail("5xx error handling did not work correctly");
|
fail("5xx error handling did not work correctly");
|
||||||
} catch (FetcherException e) {
|
} catch (final FetcherException e) {
|
||||||
// expect this exception
|
// expect this exception
|
||||||
assertEquals(500, e.getResponseCode());
|
assertEquals(500, e.getResponseCode());
|
||||||
} catch (Exception e) {
|
} catch (final Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
fail(e.getMessage());
|
fail(e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testUserAgent() {
|
public void testUserAgent() {
|
||||||
FeedFetcher feedFetcher = getFeedFetcher();
|
final FeedFetcher feedFetcher = getFeedFetcher();
|
||||||
// System.out.println(feedFetcher.getUserAgent());
|
// System.out.println(feedFetcher.getUserAgent());
|
||||||
// System.out.println(System.getProperty("rome.fetcher.version", "UNKNOWN"));
|
// System.out.println(System.getProperty("rome.fetcher.version", "UNKNOWN"));
|
||||||
assertEquals("Rome Client (http://tinyurl.com/64t5n) Ver: " + System.getProperty("rome.fetcher.version", "UNKNOWN"), feedFetcher.getUserAgent());
|
assertEquals("Rome Client (http://tinyurl.com/64t5n) Ver: " + System.getProperty("rome.fetcher.version", "UNKNOWN"), feedFetcher.getUserAgent());
|
||||||
|
@ -269,8 +270,8 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void testFetchEvents() {
|
public void testFetchEvents() {
|
||||||
FeedFetcher feedFetcher = getFeedFetcher();
|
final FeedFetcher feedFetcher = getFeedFetcher();
|
||||||
FetcherEventListenerImpl listener = new FetcherEventListenerImpl();
|
final FetcherEventListenerImpl listener = new FetcherEventListenerImpl();
|
||||||
feedFetcher.addFetcherEventListener(listener);
|
feedFetcher.addFetcherEventListener(listener);
|
||||||
try {
|
try {
|
||||||
SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort + "/rome/FetcherTestServlet/"));
|
SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort + "/rome/FetcherTestServlet/"));
|
||||||
|
@ -288,7 +289,7 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
assertTrue(listener.retrieved);
|
assertTrue(listener.retrieved);
|
||||||
assertFalse(listener.unchanged);
|
assertFalse(listener.unchanged);
|
||||||
listener.reset();
|
listener.reset();
|
||||||
} catch (Exception e) {
|
} catch (final Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
fail(e.getMessage());
|
fail(e.getMessage());
|
||||||
}
|
}
|
||||||
|
@ -299,9 +300,9 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void testFetchEventsWithCache() {
|
public void testFetchEventsWithCache() {
|
||||||
FeedFetcherCache feedInfoCache = new HashMapFeedInfoCache();
|
final FeedFetcherCache feedInfoCache = new HashMapFeedInfoCache();
|
||||||
FeedFetcher feedFetcher = getFeedFetcher(feedInfoCache);
|
final FeedFetcher feedFetcher = getFeedFetcher(feedInfoCache);
|
||||||
FetcherEventListenerImpl listener = new FetcherEventListenerImpl();
|
final FetcherEventListenerImpl listener = new FetcherEventListenerImpl();
|
||||||
feedFetcher.addFetcherEventListener(listener);
|
feedFetcher.addFetcherEventListener(listener);
|
||||||
try {
|
try {
|
||||||
SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort + "/rome/FetcherTestServlet/"));
|
SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort + "/rome/FetcherTestServlet/"));
|
||||||
|
@ -327,7 +328,7 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
assertTrue(listener.retrieved);
|
assertTrue(listener.retrieved);
|
||||||
assertFalse(listener.unchanged);
|
assertFalse(listener.unchanged);
|
||||||
listener.reset();
|
listener.reset();
|
||||||
} catch (Exception e) {
|
} catch (final Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
fail(e.getMessage());
|
fail(e.getMessage());
|
||||||
}
|
}
|
||||||
|
@ -338,19 +339,19 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void testGZippedFeed() {
|
public void testGZippedFeed() {
|
||||||
FeedFetcher feedFetcher = getFeedFetcher();
|
final FeedFetcher feedFetcher = getFeedFetcher();
|
||||||
try {
|
try {
|
||||||
SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:"+testPort+"/rome/FetcherTestServlet?gzipfeed=TRUE"));
|
final SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort + "/rome/FetcherTestServlet?gzipfeed=TRUE"));
|
||||||
assertNotNull(feed);
|
assertNotNull(feed);
|
||||||
assertEquals("atom_1.0.feed.title", feed.getTitle());
|
assertEquals("atom_1.0.feed.title", feed.getTitle());
|
||||||
} catch (Exception e) {
|
} catch (final Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
fail(e.getMessage());
|
fail(e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testPreserveWireFeed() throws Exception {
|
public void testPreserveWireFeed() throws Exception {
|
||||||
FeedFetcher feedFetcher = getFeedFetcher();
|
final FeedFetcher feedFetcher = getFeedFetcher();
|
||||||
|
|
||||||
// first check we the WireFeed is not preserved by default
|
// first check we the WireFeed is not preserved by default
|
||||||
SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort + "/rome/FetcherTestServlet/"));
|
SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort + "/rome/FetcherTestServlet/"));
|
||||||
|
@ -358,7 +359,7 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
assertEquals("atom_1.0.feed.title", feed.getTitle());
|
assertEquals("atom_1.0.feed.title", feed.getTitle());
|
||||||
assertNull(feed.originalWireFeed());
|
assertNull(feed.originalWireFeed());
|
||||||
|
|
||||||
SyndEntry syndEntry = (SyndEntry)feed.getEntries().get(0);
|
SyndEntry syndEntry = feed.getEntries().get(0);
|
||||||
assertNotNull(syndEntry);
|
assertNotNull(syndEntry);
|
||||||
assertNull(syndEntry.getWireEntry());
|
assertNull(syndEntry.getWireEntry());
|
||||||
|
|
||||||
|
@ -370,11 +371,11 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
assertEquals("atom_1.0.feed.title", feed.getTitle());
|
assertEquals("atom_1.0.feed.title", feed.getTitle());
|
||||||
assertNotNull(feed.originalWireFeed());
|
assertNotNull(feed.originalWireFeed());
|
||||||
|
|
||||||
syndEntry = (SyndEntry)feed.getEntries().get(0);
|
syndEntry = feed.getEntries().get(0);
|
||||||
assertNotNull(syndEntry);
|
assertNotNull(syndEntry);
|
||||||
assertNotNull(syndEntry.getWireEntry());
|
assertNotNull(syndEntry.getWireEntry());
|
||||||
|
|
||||||
Entry entry = (Entry) syndEntry.getWireEntry();
|
final Entry entry = (Entry) syndEntry.getWireEntry();
|
||||||
assertEquals("atom_1.0.feed.entry[0].rights", entry.getRights());
|
assertEquals("atom_1.0.feed.entry[0].rights", entry.getRights());
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -384,38 +385,39 @@ public abstract class AbstractJettyTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testDeltaEncoding() {
|
public void testDeltaEncoding() {
|
||||||
FeedFetcherCache feedInfoCache = new HashMapFeedInfoCache();
|
final FeedFetcherCache feedInfoCache = new HashMapFeedInfoCache();
|
||||||
FeedFetcher feedFetcher = getFeedFetcher(feedInfoCache);
|
final FeedFetcher feedFetcher = getFeedFetcher(feedInfoCache);
|
||||||
try {
|
try {
|
||||||
feedFetcher.setUsingDeltaEncoding(true);
|
feedFetcher.setUsingDeltaEncoding(true);
|
||||||
|
|
||||||
// first retrieval should just grab the default feed
|
// first retrieval should just grab the default feed
|
||||||
SyndFeed feed1 = feedFetcher.retrieveFeed(new URL("http://localhost:"+testPort+"/rome/FetcherTestServlet?deltaencode=TRUE&refreshfeed=TRUE"));
|
final SyndFeed feed1 = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort
|
||||||
|
+ "/rome/FetcherTestServlet?deltaencode=TRUE&refreshfeed=TRUE"));
|
||||||
assertNotNull(feed1);
|
assertNotNull(feed1);
|
||||||
assertEquals("atom_1.0.feed.title", feed1.getTitle());
|
assertEquals("atom_1.0.feed.title", feed1.getTitle());
|
||||||
assertEquals(2, feed1.getEntries().size());
|
assertEquals(2, feed1.getEntries().size());
|
||||||
SyndEntry entry1 = (SyndEntry) feed1.getEntries().get(0);
|
SyndEntry entry1 = feed1.getEntries().get(0);
|
||||||
assertEquals("atom_1.0.feed.entry[0].title", entry1.getTitle());
|
assertEquals("atom_1.0.feed.entry[0].title", entry1.getTitle());
|
||||||
|
|
||||||
// second retrieval should get only the new item
|
// second retrieval should get only the new item
|
||||||
/*
|
/*
|
||||||
* This is breaking with Rome 0.5 ??
|
* This is breaking with Rome 0.5 ??
|
||||||
*/
|
*/
|
||||||
SyndFeed feed2 = feedFetcher.retrieveFeed(new URL("http://localhost:"+testPort+"/rome/FetcherTestServlet?deltaencode=TRUE&refreshfeed=TRUE"));
|
final SyndFeed feed2 = feedFetcher.retrieveFeed(new URL("http://localhost:" + testPort
|
||||||
|
+ "/rome/FetcherTestServlet?deltaencode=TRUE&refreshfeed=TRUE"));
|
||||||
assertNotNull(feed2);
|
assertNotNull(feed2);
|
||||||
assertEquals(FetcherTestServlet.DELTA_FEED_TITLE, feed2.getTitle());
|
assertEquals(FetcherTestServlet.DELTA_FEED_TITLE, feed2.getTitle());
|
||||||
assertEquals(3, feed2.getEntries().size());
|
assertEquals(3, feed2.getEntries().size());
|
||||||
entry1 = (SyndEntry) feed2.getEntries().get(0);
|
entry1 = feed2.getEntries().get(0);
|
||||||
assertEquals(FetcherTestServlet.DELTA_FEED_ENTRY_TITLE, entry1.getTitle());
|
assertEquals(FetcherTestServlet.DELTA_FEED_ENTRY_TITLE, entry1.getTitle());
|
||||||
|
|
||||||
SyndEntry entry2 = (SyndEntry) feed2.getEntries().get(1);
|
final SyndEntry entry2 = feed2.getEntries().get(1);
|
||||||
assertEquals("atom_1.0.feed.entry[0].title", entry2.getTitle());
|
assertEquals("atom_1.0.feed.entry[0].title", entry2.getTitle());
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (final Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
fail(e.getMessage());
|
fail(e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,23 @@
|
||||||
package org.rometools.test;
|
package org.rometools.test;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.rometools.fetcher.impl.DiskFeedInfoCache;
|
import org.rometools.fetcher.impl.DiskFeedInfoCache;
|
||||||
import org.rometools.fetcher.impl.SyndFeedInfo;
|
import org.rometools.fetcher.impl.SyndFeedInfo;
|
||||||
import java.net.*;
|
|
||||||
import java.io.File;
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
public class DiskFeedInfoCacheTest extends TestCase {
|
public class DiskFeedInfoCacheTest extends TestCase {
|
||||||
|
|
||||||
public void testClear() throws Exception {
|
public void testClear() throws Exception {
|
||||||
File cacheDir = new File("test-cache");
|
final File cacheDir = new File("test-cache");
|
||||||
cacheDir.mkdir();
|
cacheDir.mkdir();
|
||||||
cacheDir.deleteOnExit();
|
cacheDir.deleteOnExit();
|
||||||
|
|
||||||
final DiskFeedInfoCache cache = new DiskFeedInfoCache(cacheDir.getCanonicalPath());
|
final DiskFeedInfoCache cache = new DiskFeedInfoCache(cacheDir.getCanonicalPath());
|
||||||
SyndFeedInfo info = new SyndFeedInfo();
|
final SyndFeedInfo info = new SyndFeedInfo();
|
||||||
URL url = new URL("http://nowhere.com");
|
final URL url = new URL("http://nowhere.com");
|
||||||
cache.setFeedInfo(url, info);
|
cache.setFeedInfo(url, info);
|
||||||
|
|
||||||
cache.clear();
|
cache.clear();
|
||||||
|
@ -24,18 +26,18 @@ public class DiskFeedInfoCacheTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testRemove() throws Exception {
|
public void testRemove() throws Exception {
|
||||||
File cacheDir = new File("test-cache");
|
final File cacheDir = new File("test-cache");
|
||||||
cacheDir.mkdir();
|
cacheDir.mkdir();
|
||||||
cacheDir.deleteOnExit();
|
cacheDir.deleteOnExit();
|
||||||
|
|
||||||
final DiskFeedInfoCache cache = new DiskFeedInfoCache(cacheDir.getCanonicalPath());
|
final DiskFeedInfoCache cache = new DiskFeedInfoCache(cacheDir.getCanonicalPath());
|
||||||
SyndFeedInfo info = new SyndFeedInfo();
|
final SyndFeedInfo info = new SyndFeedInfo();
|
||||||
URL url = new URL("http://nowhere.com");
|
final URL url = new URL("http://nowhere.com");
|
||||||
cache.setFeedInfo(url, info);
|
cache.setFeedInfo(url, info);
|
||||||
|
|
||||||
SyndFeedInfo removedInfo = cache.remove( url );
|
final SyndFeedInfo removedInfo = cache.remove(url);
|
||||||
assertTrue(removedInfo.equals(info));
|
assertTrue(removedInfo.equals(info));
|
||||||
SyndFeedInfo shouldBeNull = cache.remove( url );
|
final SyndFeedInfo shouldBeNull = cache.remove(url);
|
||||||
assertTrue(null == shouldBeNull);
|
assertTrue(null == shouldBeNull);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
package org.rometools.test;
|
package org.rometools.test;
|
||||||
|
|
||||||
import org.rometools.fetcher.impl.HashMapFeedInfoCache;
|
|
||||||
import org.rometools.fetcher.impl.SyndFeedInfo;
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import org.rometools.fetcher.impl.HashMapFeedInfoCache;
|
||||||
|
import org.rometools.fetcher.impl.SyndFeedInfo;
|
||||||
|
|
||||||
public class HashMapFeedInfoCacheTest extends TestCase {
|
public class HashMapFeedInfoCacheTest extends TestCase {
|
||||||
|
|
||||||
public void testRemove() throws Exception {
|
public void testRemove() throws Exception {
|
||||||
|
|
|
@ -16,39 +16,42 @@
|
||||||
*/
|
*/
|
||||||
package org.rometools.test;
|
package org.rometools.test;
|
||||||
|
|
||||||
import org.rometools.fetcher.impl.HttpClientFeedFetcher;
|
|
||||||
import org.rometools.fetcher.impl.FeedFetcherCache;
|
|
||||||
import org.apache.commons.httpclient.Credentials;
|
import org.apache.commons.httpclient.Credentials;
|
||||||
import org.apache.commons.httpclient.UsernamePasswordCredentials;
|
import org.apache.commons.httpclient.UsernamePasswordCredentials;
|
||||||
|
|
||||||
import org.rometools.fetcher.FeedFetcher;
|
import org.rometools.fetcher.FeedFetcher;
|
||||||
|
import org.rometools.fetcher.impl.FeedFetcherCache;
|
||||||
|
import org.rometools.fetcher.impl.HttpClientFeedFetcher;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Nick Lothian
|
* @author Nick Lothian
|
||||||
*/
|
*/
|
||||||
public class HttpClientFeedFetcherTest extends AbstractJettyTest {
|
public class HttpClientFeedFetcherTest extends AbstractJettyTest {
|
||||||
|
|
||||||
public HttpClientFeedFetcherTest(String s) {
|
public HttpClientFeedFetcherTest(final String s) {
|
||||||
super(s);
|
super(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see com.sun.syndication.fetcher.impl.AbstractJettyTest#getFeedFetcher()
|
* @see com.sun.syndication.fetcher.impl.AbstractJettyTest#getFeedFetcher()
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected FeedFetcher getFeedFetcher() {
|
protected FeedFetcher getFeedFetcher() {
|
||||||
return new HttpClientFeedFetcher();
|
return new HttpClientFeedFetcher();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected FeedFetcher getFeedFetcher(FeedFetcherCache cache) {
|
@Override
|
||||||
|
protected FeedFetcher getFeedFetcher(final FeedFetcherCache cache) {
|
||||||
return new HttpClientFeedFetcher(cache);
|
return new HttpClientFeedFetcher(cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see com.sun.syndication.fetcher.impl.AbstractJettyTest#getAuthenticatedFeedFetcher()
|
* @see com.sun.syndication.fetcher.impl.AbstractJettyTest#getAuthenticatedFeedFetcher()
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public FeedFetcher getAuthenticatedFeedFetcher() {
|
public FeedFetcher getAuthenticatedFeedFetcher() {
|
||||||
return new HttpClientFeedFetcher(null, new HttpClientFeedFetcher.CredentialSupplier() {
|
return new HttpClientFeedFetcher(null, new HttpClientFeedFetcher.CredentialSupplier() {
|
||||||
public Credentials getCredentials(String realm, String host) {
|
@Override
|
||||||
|
public Credentials getCredentials(final String realm, final String host) {
|
||||||
if ("localhost".equals(host)) {
|
if ("localhost".equals(host)) {
|
||||||
return new UsernamePasswordCredentials("username", "password");
|
return new UsernamePasswordCredentials("username", "password");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -16,40 +16,40 @@
|
||||||
*/
|
*/
|
||||||
package org.rometools.test;
|
package org.rometools.test;
|
||||||
|
|
||||||
import org.rometools.fetcher.impl.HttpURLFeedFetcher;
|
|
||||||
import org.rometools.fetcher.impl.FeedFetcherCache;
|
|
||||||
import org.rometools.fetcher.FeedFetcher;
|
import org.rometools.fetcher.FeedFetcher;
|
||||||
|
import org.rometools.fetcher.impl.FeedFetcherCache;
|
||||||
|
import org.rometools.fetcher.impl.HttpURLFeedFetcher;
|
||||||
|
|
||||||
public class HttpURLFeedFetcherTest extends AbstractJettyTest {
|
public class HttpURLFeedFetcherTest extends AbstractJettyTest {
|
||||||
|
|
||||||
public HttpURLFeedFetcherTest(String s) {
|
public HttpURLFeedFetcherTest(final String s) {
|
||||||
super(s);
|
super(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see com.sun.syndication.fetcher.impl.AbstractJettyTest#getFeedFetcher()
|
* @see com.sun.syndication.fetcher.impl.AbstractJettyTest#getFeedFetcher()
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected FeedFetcher getFeedFetcher() {
|
protected FeedFetcher getFeedFetcher() {
|
||||||
return new HttpURLFeedFetcher();
|
return new HttpURLFeedFetcher();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected FeedFetcher getFeedFetcher(FeedFetcherCache cache) {
|
@Override
|
||||||
|
protected FeedFetcher getFeedFetcher(final FeedFetcherCache cache) {
|
||||||
return new HttpURLFeedFetcher(cache);
|
return new HttpURLFeedFetcher(cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see com.sun.syndication.fetcher.impl.AbstractJettyTest#getAuthenticatedFeedFetcher()
|
* @see com.sun.syndication.fetcher.impl.AbstractJettyTest#getAuthenticatedFeedFetcher()
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public FeedFetcher getAuthenticatedFeedFetcher() {
|
public FeedFetcher getAuthenticatedFeedFetcher() {
|
||||||
// setup the authenticator
|
// setup the authenticator
|
||||||
java.net.Authenticator.setDefault(new TestBasicAuthenticator());
|
java.net.Authenticator.setDefault(new TestBasicAuthenticator());
|
||||||
|
|
||||||
FeedFetcher feedFetcher = getFeedFetcher();
|
final FeedFetcher feedFetcher = getFeedFetcher();
|
||||||
|
|
||||||
return feedFetcher;
|
return feedFetcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,16 +16,16 @@
|
||||||
*/
|
*/
|
||||||
package org.rometools.test;
|
package org.rometools.test;
|
||||||
|
|
||||||
import org.rometools.fetcher.impl.ResponseHandler;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import org.rometools.fetcher.impl.ResponseHandler;
|
||||||
|
|
||||||
public class ResponseHandlerTest extends TestCase {
|
public class ResponseHandlerTest extends TestCase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for ResponseHandlerTest.
|
* Constructor for ResponseHandlerTest.
|
||||||
*/
|
*/
|
||||||
public ResponseHandlerTest(String arg0) {
|
public ResponseHandlerTest(final String arg0) {
|
||||||
super(arg0);
|
super(arg0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ public class TestBasicAuthenticator extends Authenticator {
|
||||||
/**
|
/**
|
||||||
* @see java.net.Authenticator#getPasswordAuthentication()
|
* @see java.net.Authenticator#getPasswordAuthentication()
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected PasswordAuthentication getPasswordAuthentication() {
|
protected PasswordAuthentication getPasswordAuthentication() {
|
||||||
if ("localhost".equals(getRequestingHost())) {
|
if ("localhost".equals(getRequestingHost())) {
|
||||||
return new PasswordAuthentication("username", "password".toCharArray());
|
return new PasswordAuthentication("username", "password".toCharArray());
|
||||||
|
|
Loading…
Reference in a new issue