wallabag icon indicating copy to clipboard operation
wallabag copied to clipboard

Attempted to call an undefined method when using browser extension or android app

Open landowark opened this issue 2 years ago • 9 comments

Environment

  • Version: 2.4.3
  • Installation: git clone
  • PHP version: 7.3
  • OS: raspbian 64 bit
  • Database: mariadb
  • Parameters: below
My app/config/parameters.yml is:
parameters:
  database_driver: pdo_mysql
  database_host: 127.0.0.1
  database_port: 3306
  database_name: wallabag
  database_user: wallabaguser
  database_password: <password>
  database_path: null
  database_table_prefix: wallabag_
  database_socket: null
  database_charset: utf8mb4
  domain_name: 'https://<url>'
  server_name: 'https://<url>'
  mailer_transport: smtp
  mailer_user: null
  mailer_password: null
  mailer_host: 127.0.0.1
  mailer_port: false
  mailer_encryption: null
  mailer_auth_mode: null
  locale: en
  secret: CHANGE_ME_TO_SOMETHING_SECRET_AND_RANDOM
  twofactor_auth: true
  twofactor_sender: [email protected]
  fosuser_registration: true
  fosuser_confirmation: true
  fos_oauth_server_access_token_lifetime: 3600
  fos_oauth_server_refresh_token_lifetime: 1209600
  from_email: [email protected]
  rss_limit: 50
  rabbitmq_host: localhost
  rabbitmq_port: 5672
  rabbitmq_user: guest
  rabbitmq_password: guest
  rabbitmq_prefetch_count: 10
  redis_scheme: tcp
  redis_host: localhost
  redis_port: 6379
  redis_path: null
  redis_password: null
  sentry_dsn: null

What steps will reproduce the bug?

Upon using the chrome extension or trying to access articles or share to the android app I get hit with server failures (error 500 on the android app). The browser extension will result in a clipped web page, but the android app fails completely. Upon checking the prod.log I see:

request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\UndefinedMethodException: "Attempted to call an undefined method named "getAttributes" of class "ReflectionClass"." at /var/www/wallabag/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php line 26 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\UndefinedMethodException(code: 0): Attempted to call an undefined method named \"getAttributes\" of class \"ReflectionClass\". at /var/www/wallabag/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php:26)"} []

I'm wondering if maybe there's a missing php dependency somewhere.

landowark avatar Mar 09 '22 02:03 landowark

Anything else in the log? It's almost impossible to debug it with only that line.

j0k3r avatar Mar 09 '22 08:03 j0k3r

Sorry, here's the whole log (with html removed for brevity.

[2022-03-09 16:41:17] request.INFO: Matched route "api_post_entries". {"route":"api_post_entries","route_parameters":{"_controller":"Wallabag\\ApiBundle\\Controller\\EntryRestController::postEntriesAction","_format":"json","_route":"api_post_entries"},"request_uri":"https://wallabag.landonserver.tk/api/entries.json","method":"POST"} []
[2022-03-09 16:41:18] app.DEBUG: Restricted access config enabled? {"enabled":0} []
[2022-03-09 16:41:18] graby.INFO: Graby is ready to fetch [] []
[2022-03-09 16:41:18] graby.INFO: . looking for site config for joplinapp.org in primary folder {"host":"joplinapp.org"} []
[2022-03-09 16:41:18] graby.INFO: Appending site config settings from global.txt [] []
[2022-03-09 16:41:18] graby.INFO: . looking for site config for global in primary folder {"host":"global"} []
[2022-03-09 16:41:18] graby.INFO: ... found site config global.txt {"host":"global.txt"} []
[2022-03-09 16:41:18] graby.INFO: Cached site config with key: joplinapp.org {"key":"joplinapp.org"} []
[2022-03-09 16:41:18] graby.INFO: . looking for site config for global in primary folder {"host":"global"} []
[2022-03-09 16:41:18] graby.INFO: ... found site config global.txt {"host":"global.txt"} []
[2022-03-09 16:41:18] graby.INFO: Appending site config settings from global.txt [] []
[2022-03-09 16:41:18] graby.INFO: Cached site config with key: global {"key":"global"} []
[2022-03-09 16:41:18] graby.INFO: Cached site config with key: joplinapp.org.merged {"key":"joplinapp.org.merged"} []
[2022-03-09 16:41:18] graby.INFO: Fetching url: https://joplinapp.org/help/#desktop-applications {"url":"https://joplinapp.org/help/#desktop-applications"} []
[2022-03-09 16:41:18] graby.INFO: Trying using method "get" on url "https://joplinapp.org/help/" {"method":"get","url":"https://joplinapp.org/help/"} []
[2022-03-09 16:41:18] graby.INFO: Use default user-agent "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.92 Safari/535.2" for url "https://joplinapp.org/help/" {"user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.92 Safari/535.2","url":"https://joplinapp.org/help/"} []
[2022-03-09 16:41:18] graby.INFO: Use default referer "http://www.google.co.uk/url?sa=t&source=web&cd=1" for url "https://joplinapp.org/help/" {"referer":"http://www.google.co.uk/url?sa=t&source=web&cd=1","url":"https://joplinapp.org/help/"} []
[2022-03-09 16:41:18] app.INFO: Sending request: GET https://joplinapp.org/help/ 1.1 {"request":"[object] (Laminas\\Diactoros\\Request: {})"} []
[2022-03-09 16:41:19] app.INFO: Received response: 200 OK 1.1  for request: GET https://joplinapp.org/help/ 1.1 {"request":"[object] (Laminas\\Diactoros\\Request: {})","response":"[object] (GuzzleHttp\\Psr7\\Response: {})","milliseconds":916} []
[2022-03-09 16:41:19] graby.INFO: Data fetched: array{"effective_url":"https://joplinapp.org/help/","body":"(only length for debug): 145405","headers":{"connection":"keep-alive","content-length":"145405","server":"GitHub.com","content-type":"text/html; charset=utf-8","x-origin-cache":"HIT","last-modified":"Wed, 09 Mar 2022 18:17:29 GMT","access-control-allow-origin":"*","strict-transport-security":"max-age=31556952","etag":"\"6228ef39-237fd\"","expires":"Wed, 09 Mar 2022 22:51:19 GMT","cache-control":"max-age=600","x-proxy-cache":"MISS","x-github-request-id":"BA78:76D8:5F7058:911CC5:62292D0F","accept-ranges":"bytes","date":"Wed, 09 Mar 2022 22:41:19 GMT","via":"1.1 varnish","age":"0","x-served-by":"cache-yyz4556-YYZ","x-cache":"MISS","x-cache-hits":"0","x-timer":"S1646865680.653385,VS0,VE21","vary":"Accept-Encoding","x-fastly-request-id":"3bfbd0d42c916f1187aed26a2f9e6ea0f8b557d0"},"status":200} {"data":{"effective_url":"https://joplinapp.org/help/","body":"(only length for debug): 145405","headers":{"connection":"keep-alive","content-length":"145405","server":"GitHub.com","content-type":"text/html; charset=utf-8","x-origin-cache":"HIT","last-modified":"Wed, 09 Mar 2022 18:17:29 GMT","access-control-allow-origin":"*","strict-transport-security":"max-age=31556952","etag":"\"6228ef39-237fd\"","expires":"Wed, 09 Mar 2022 22:51:19 GMT","cache-control":"max-age=600","x-proxy-cache":"MISS","x-github-request-id":"BA78:76D8:5F7058:911CC5:62292D0F","accept-ranges":"bytes","date":"Wed, 09 Mar 2022 22:41:19 GMT","via":"1.1 varnish","age":"0","x-served-by":"cache-yyz4556-YYZ","x-cache":"MISS","x-cache-hits":"0","x-timer":"S1646865680.653385,VS0,VE21","vary":"Accept-Encoding","x-fastly-request-id":"3bfbd0d42c916f1187aed26a2f9e6ea0f8b557d0"},"status":200}} []
[2022-03-09 16:41:19] graby.INFO: Treating as UTF-8 {"encoding":"utf-8"} []
[2022-03-09 16:41:19] graby.DEBUG: Fetched HTML {"html": <deleted for brevity>} []
[2022-03-09 16:41:19] graby.INFO: Looking for site config files to see if single page link exists [] []
[2022-03-09 16:41:19] graby.INFO: Returning cached and merged site config for joplinapp.org {"host":"joplinapp.org"} []
[2022-03-09 16:41:19] graby.INFO: No "single_page_link" config found [] []
[2022-03-09 16:41:19] graby.INFO: Attempting to extract content [] []
[2022-03-09 16:41:19] graby.INFO: Returning cached and merged site config for joplinapp.org {"host":"joplinapp.org"} []
[2022-03-09 16:41:19] graby.DEBUG: Actual site config {"siteConfig":"[object] (Graby\\SiteConfig\\SiteConfig: {\"title\":[\"//meta[@property=\\\"og:title\\\"]/@content\"],\"body\":[],\"author\":[],\"date\":[\"//meta[@property=\\\"article:published_time\\\"]/@content\"],\"strip\":[\"//*[contains(@class, 'google-dfp-ad-wrapper')]\",\"//iframe/@srcdoc\"],\"src_lazy_load_attr\":null,\"strip_id_or_class\":[\"sharedaddy\",\"i-amphtml-replaced-content\"],\"strip_image_src\":[\"doubleclick.net\"],\"native_ad_clue\":[],\"http_header\":[],\"tidy\":null,\"autodetect_on_failure\":null,\"prune\":null,\"test_url\":[],\"if_page_contains\":[],\"single_page_link\":[],\"next_page_link\":[],\"parser\":null,\"find_string\":[\"<amp-img\",\"</amp-img>\"],\"replace_string\":[\"<img\",\"<!-- nothing -->\"],\"cache_key\":null,\"requires_login\":false,\"not_logged_in_xpath\":null,\"login_uri\":null,\"login_username_field\":null,\"login_password_field\":null,\"login_extra_fields\":[],\"skip_json_ld\":false,\"wrap_in\":[]})"} []
[2022-03-09 16:41:19] graby.INFO: Strings replaced: 0 (find_string and/or replace_string) {"count":0} []
[2022-03-09 16:41:19] graby.DEBUG: HTML after site config strings replacements {"html":<deleted for brevity>} []
[2022-03-09 16:41:19] graby.INFO: Attempting to parse HTML with libxml {"parser":"libxml"} []
[2022-03-09 16:41:19] graby.INFO: Body size after Readability: 139985 {"length":139985} []
[2022-03-09 16:41:19] graby.DEBUG: Body after Readability {"dom_saveXML":<deleted for brevity>} []
[2022-03-09 16:41:19] graby.INFO: Opengraph "og:" data: array{"og_url":"https://joplinapp.org/help/","og_title":"Joplin documentation","og_description":""} {"ogData":{"og_url":"https://joplinapp.org/help/","og_title":"Joplin documentation","og_description":""}} []
[2022-03-09 16:41:19] graby.INFO: Opengraph "article:" data: array[] {"ogData":[]} []
[2022-03-09 16:41:19] graby.INFO: Trying //meta[@property="og:title"]/@content for title {"pattern":"//meta[@property=\"og:title\"]/@content"} []
[2022-03-09 16:41:19] graby.INFO: title matched: Joplin documentation {"title":"Joplin documentation"} []
[2022-03-09 16:41:19] graby.INFO: ...XPath match: {pattern} ["pattern","//meta[@property=\"og:title\"]/@content"] []
[2022-03-09 16:41:19] graby.INFO: Trying //meta[@property="article:published_time"]/@content for date {"pattern":"//meta[@property=\"article:published_time\"]/@content"} []
[2022-03-09 16:41:19] graby.INFO: Trying //html[@lang]/@lang for language {"pattern":"//html[@lang]/@lang"} []
[2022-03-09 16:41:19] graby.INFO: Language matched: en {"language":"en"} []
[2022-03-09 16:41:19] graby.INFO: Trying //*[contains(@class, 'google-dfp-ad-wrapper')] to strip element {"pattern":"//*[contains(@class, 'google-dfp-ad-wrapper')]"} []
[2022-03-09 16:41:19] graby.INFO: Trying //iframe/@srcdoc to strip element {"pattern":"//iframe/@srcdoc"} []
[2022-03-09 16:41:19] graby.INFO: Trying sharedaddy to strip element {"string":"sharedaddy"} []
[2022-03-09 16:41:19] graby.INFO: Trying i-amphtml-replaced-content to strip element {"string":"i-amphtml-replaced-content"} []
[2022-03-09 16:41:20] graby.INFO: Stripping 14 empty a elements {"length":14} []
[2022-03-09 16:41:20] graby.DEBUG: DOM after site config stripping {"dom_saveXML":<deleted for brevity>} []
[2022-03-09 16:41:20] graby.INFO: Using Readability [] []
[2022-03-09 16:41:21] graby.INFO: Date is bad (strtotime failed):  {"date":null} []
[2022-03-09 16:41:21] graby.INFO: Detecting body [] []
[2022-03-09 16:41:21] graby.INFO: Pruning content [] []
[2022-03-09 16:41:21] graby.INFO: Success ? 1 {"is_success":true} []
[2022-03-09 16:41:22] graby.DEBUG: Body after cleanupHtml, before cleanupXss {"html": <deleted for brevity>} []
[2022-03-09 16:41:22] graby.INFO: Filtering HTML to remove XSS [] []
[2022-03-09 16:41:22] graby.INFO: Returning data (most interesting ones): array{"html":"(only length for debug): 132183","status":200,"title":"Joplin documentation","language":"en","date":null,"authors":[],"url":"https://joplinapp.org/help/","image":null,"native_ad":false,"headers":{"connection":"keep-alive","content-length":"145405","server":"GitHub.com","content-type":"text/html; charset=utf-8","x-origin-cache":"HIT","last-modified":"Wed, 09 Mar 2022 18:17:29 GMT","access-control-allow-origin":"*","strict-transport-security":"max-age=31556952","etag":"\"6228ef39-237fd\"","expires":"Wed, 09 Mar 2022 22:51:19 GMT","cache-control":"max-age=600","x-proxy-cache":"MISS","x-github-request-id":"BA78:76D8:5F7058:911CC5:62292D0F","accept-ranges":"bytes","date":"Wed, 09 Mar 2022 22:41:19 GMT","via":"1.1 varnish","age":"0","x-served-by":"cache-yyz4556-YYZ","x-cache":"MISS","x-cache-hits":"0","x-timer":"S1646865680.653385,VS0,VE21","vary":"Accept-Encoding","x-fastly-request-id":"3bfbd0d42c916f1187aed26a2f9e6ea0f8b557d0"}} {"data":{"html":"(only length for debug): 132183","status":200,"title":"Joplin documentation","language":"en","date":null,"authors":[],"url":"https://joplinapp.org/help/","image":null,"native_ad":false,"headers":{"connection":"keep-alive","content-length":"145405","server":"GitHub.com","content-type":"text/html; charset=utf-8","x-origin-cache":"HIT","last-modified":"Wed, 09 Mar 2022 18:17:29 GMT","access-control-allow-origin":"*","strict-transport-security":"max-age=31556952","etag":"\"6228ef39-237fd\"","expires":"Wed, 09 Mar 2022 22:51:19 GMT","cache-control":"max-age=600","x-proxy-cache":"MISS","x-github-request-id":"BA78:76D8:5F7058:911CC5:62292D0F","accept-ranges":"bytes","date":"Wed, 09 Mar 2022 22:41:19 GMT","via":"1.1 varnish","age":"0","x-served-by":"cache-yyz4556-YYZ","x-cache":"MISS","x-cache-hits":"0","x-timer":"S1646865680.653385,VS0,VE21","vary":"Accept-Encoding","x-fastly-request-id":"3bfbd0d42c916f1187aed26a2f9e6ea0f8b557d0"}}} []
[2022-03-09 16:41:22] app.DEBUG: Extracting images from content to provide a default preview picture [] []
[2022-03-09 16:41:22] app.DEBUG: 446 pictures found [] []
[2022-03-09 16:41:22] app.DEBUG: DownloadImagesSubscriber: disabled. [] []
[2022-03-09 16:41:22] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\UndefinedMethodException: "Attempted to call an undefined method named "getAttributes" of class "ReflectionClass"." at /var/www/wallabag/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php line 26 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\UndefinedMethodException(code: 0): Attempted to call an undefined method named \"getAttributes\" of class \"ReflectionClass\". at /var/www/wallabag/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php:26)"} []
[2022-03-09 16:45:20] request.INFO: Matched route "api_post_entries". {"route":"api_post_entries","route_parameters":{"_controller":"Wallabag\\ApiBundle\\Controller\\EntryRestController::postEntriesAction","_format":"json","_route":"api_post_entries"},"request_uri":"https://wallabag.landonserver.tk/api/entries.json","method":"POST"} []
[2022-03-09 16:45:20] app.DEBUG: Restricted access config enabled? {"enabled":0} []
[2022-03-09 16:45:20] graby.INFO: . looking for site config for christophergs.com in primary folder {"host":"christophergs.com"} []
[2022-03-09 16:45:20] graby.INFO: Appending site config settings from global.txt [] []
[2022-03-09 16:45:20] graby.INFO: . looking for site config for global in primary folder {"host":"global"} []
[2022-03-09 16:45:20] graby.INFO: ... found site config global.txt {"host":"global.txt"} []
[2022-03-09 16:45:20] graby.INFO: Cached site config with key: christophergs.com {"key":"christophergs.com"} []
[2022-03-09 16:45:20] graby.INFO: . looking for site config for global in primary folder {"host":"global"} []
[2022-03-09 16:45:20] graby.INFO: ... found site config global.txt {"host":"global.txt"} []
[2022-03-09 16:45:20] graby.INFO: Appending site config settings from global.txt [] []
[2022-03-09 16:45:20] graby.INFO: Cached site config with key: global {"key":"global"} []
[2022-03-09 16:45:20] graby.INFO: Cached site config with key: christophergs.com.merged {"key":"christophergs.com.merged"} []
[2022-03-09 16:45:20] graby.DEBUG: Actual site config {"siteConfig":"[object] (Graby\\SiteConfig\\SiteConfig: {\"title\":[\"//meta[@property=\\\"og:title\\\"]/@content\"],\"body\":[],\"author\":[],\"date\":[\"//meta[@property=\\\"article:published_time\\\"]/@content\"],\"strip\":[\"//*[contains(@class, 'google-dfp-ad-wrapper')]\",\"//iframe/@srcdoc\"],\"src_lazy_load_attr\":null,\"strip_id_or_class\":[\"sharedaddy\",\"i-amphtml-replaced-content\"],\"strip_image_src\":[\"doubleclick.net\"],\"native_ad_clue\":[],\"http_header\":[],\"tidy\":null,\"autodetect_on_failure\":null,\"prune\":null,\"test_url\":[],\"if_page_contains\":[],\"single_page_link\":[],\"next_page_link\":[],\"parser\":null,\"find_string\":[\"<amp-img\",\"</amp-img>\"],\"replace_string\":[\"<img\",\"<!-- nothing -->\"],\"cache_key\":null,\"requires_login\":false,\"not_logged_in_xpath\":null,\"login_uri\":null,\"login_username_field\":null,\"login_password_field\":null,\"login_extra_fields\":[],\"skip_json_ld\":false,\"wrap_in\":[]})"} []
[2022-03-09 16:45:20] graby.INFO: Strings replaced: 0 (find_string and/or replace_string) {"count":0} []
[2022-03-09 16:45:20] graby.DEBUG: HTML after site config strings replacements {"html":<deleted for brevity>} []
[2022-03-09 16:45:20] graby.INFO: Attempting to parse HTML with libxml {"parser":"libxml"} []
[2022-03-09 16:45:20] graby.INFO: Body size after Readability: 5773 {"length":5773} []
[2022-03-09 16:45:20] graby.DEBUG: Body after Readability {"dom_saveXML": <deleted for brevity>} []
[2022-03-09 16:45:20] graby.INFO: Opengraph "og:" data: array[] {"ogData":[]} []
[2022-03-09 16:45:20] graby.INFO: Opengraph "article:" data: array[] {"ogData":[]} []
[2022-03-09 16:45:20] graby.INFO: Trying //meta[@property="og:title"]/@content for title {"pattern":"//meta[@property=\"og:title\"]/@content"} []
[2022-03-09 16:45:20] graby.INFO: Trying //meta[@property="article:published_time"]/@content for date {"pattern":"//meta[@property=\"article:published_time\"]/@content"} []
[2022-03-09 16:45:20] graby.INFO: Trying //html[@lang]/@lang for language {"pattern":"//html[@lang]/@lang"} []
[2022-03-09 16:45:20] graby.INFO: Trying //meta[@name="DC.language"]/@content for language {"pattern":"//meta[@name=\"DC.language\"]/@content"} []
[2022-03-09 16:45:20] graby.INFO: Trying //*[contains(@class, 'google-dfp-ad-wrapper')] to strip element {"pattern":"//*[contains(@class, 'google-dfp-ad-wrapper')]"} []
[2022-03-09 16:45:20] graby.INFO: Trying //iframe/@srcdoc to strip element {"pattern":"//iframe/@srcdoc"} []
[2022-03-09 16:45:20] graby.INFO: Trying sharedaddy to strip element {"string":"sharedaddy"} []
[2022-03-09 16:45:20] graby.INFO: Trying i-amphtml-replaced-content to strip element {"string":"i-amphtml-replaced-content"} []
[2022-03-09 16:45:20] graby.DEBUG: DOM after site config stripping {"dom_saveXML":<deleted for brevity>} []
[2022-03-09 16:45:20] graby.INFO: Using Readability [] []
[2022-03-09 16:45:20] graby.INFO: Date is bad (strtotime failed):  {"date":null} []
[2022-03-09 16:45:20] graby.INFO: Success ?  {"is_success":false} []
[2022-03-09 16:45:20] graby.INFO: Cleanup html failed. Return given content (a bit cleaned) [] []
[2022-03-09 16:45:20] graby.INFO: Filtering HTML to remove XSS [] []
[2022-03-09 16:45:20] app.DEBUG: Extracting images from content to provide a default preview picture [] []
[2022-03-09 16:45:20] app.DEBUG: 0 pictures found [] []
[2022-03-09 16:45:20] app.DEBUG: DownloadImagesSubscriber: disabled. [] []
[2022-03-09 16:45:21] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\UndefinedMethodException: "Attempted to call an undefined method named "getAttributes" of class "ReflectionClass"." at /var/www/wallabag/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php line 26 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\UndefinedMethodException(code: 0): Attempted to call an undefined method named \"getAttributes\" of class \"ReflectionClass\". at /var/www/wallabag/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php:26)"} []

landowark avatar Mar 09 '22 23:03 landowark

Hi. I'm seeing this, too, both with the official Android app as well as interacting with the API (with code that I've been successfully using for the last couple of years, so I know it's stable). Here is the relevant part from my ~/wallabag/var/logs/prod.log file after attempting to sync with the official Android application (slightly reformatted for legibility, can paste someplace if requested):

[2023-01-07 18:05:11] request.INFO: Matched route "api_get_entries".
{"route":"api_get_entries","route_parameters":{"_controller":"Wallabag\\ApiBundle\\
Controller\\EntryRestController::getEntriesAction", "_format":"json",
"_route":"api_get_entries"}, "request_uri":"https://foo.bar./api/entries.json?
    detail=full&order=asc&page=1&perPage=30&since=1672992332&sort=updated",
"method":"GET"} []

[2023-01-07 18:05:12] request.CRITICAL: Uncaught PHP Exception Symfony\Component
\Debug\Exception\UndefinedMethodException: "Attempted to call an undefined method named
"getAttributes" of class "ReflectionClass"." at /home/drwho/wallabag/vendor/jms/serializer
/src/Metadata/Driver/AttributeDriver/AttributeReader.php line 26 {"exception":"[object] 
(Symfony\\Component\\Debug\\Exception\\UndefinedMethodException(code: 0): Attempted
to call an undefined method named \"getAttributes\" of class \"ReflectionClass\". at
/home/drwho/wallabag/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver
    /AttributeReader.php:26)"} []

[2023-01-07 18:05:13] request.INFO: Matched route "api_get_entries". 
{"route":"api_get_entries","route_parameters":{"_controller":"Wallabag\\ApiBundle\\
    Controller\\EntryRestController::getEntriesAction",
"_format":"json","_route":"api_get_entries"},"request_uri":
"https://foo.bar/api/entries.json?detail=full&order=asc&page=1&perPage=30&
    since=1672992332&sort=updated","method":"GET"} []

[2023-01-07 18:05:13] request.CRITICAL: Uncaught PHP Exception Symfony\Component\
Debug\Exception\UndefinedMethodException: "Attempted to call an undefined method named
"getAttributes" of class "ReflectionClass"." at /home/drwho/wallabag/vendor/jms/
    serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php line 26
{"exception":"[object] (Symfony\\Component\\Debug\\Exception\\UndefinedMethodException
(code: 0): Attempted to call an undefined method named \"getAttributes\" of class
\"ReflectionClass\". at /home/drwho/wallabag/vendor/jms/serializer/src/Metadata/Driver
/AttributeDriver/AttributeReader.php:26)"} []

PHP v7.4, official packages from the Ubuntu v20.04 LTS repo.

virtadpt avatar Jan 07 '23 18:01 virtadpt

Hello @virtadpt and @landowark.

Thank you for reporting this issue. I see that you have quite old php versions.

Can you reproduce this issue with PHP >= 8.1 ?

nicosomb avatar Aug 03 '23 15:08 nicosomb

I was having the same issue under PHP 7.4 but I can reproduce under PHP 8.1.6 too.

[2023-08-07 21:52:16] request.INFO: Matched route "api_get_info". {"route":"api_get_info","route_parameters":{"_route":"api_get_info","_format":"json","_controller":"Wallabag\\ApiBundle\\Controller\\WallabagRestController::getInfoAction"},"request_uri":"https://wallabag.XXXXX.XXX/api/info.json","method":"GET"} []
[2023-08-07 21:52:16] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2023-08-07 21:52:16] request.CRITICAL: Uncaught PHP Exception Symfony\Component\ErrorHandler\Error\UndefinedMethodError: "Attempted to call an undefined method named "getAttributes" of class "ReflectionClass"." at /var/www/wallabag/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php line 29 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Attempted to call an undefined method named \"getAttributes\" of class \"ReflectionClass\". at /var/www/wallabag/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php:29)"} []

xadium avatar Aug 07 '23 21:08 xadium

Hello, I also have this issue since updating on PHP 7.4

[2023-08-29T13:18:45.906197+02:00] graby.INFO: Filtering HTML to remove XSS [] []
[2023-08-29T13:18:46.029769+02:00] app.DEBUG: DownloadImagesSubscriber: disabled. [] []
[2023-08-29T13:18:46.053931+02:00] request.CRITICAL: Uncaught PHP Exception Symfony\Component\ErrorHandler\Error\UndefinedMethodError: "Attempted to call an undefined method named "getAttributes" of class "ReflectionClass"." at /srv/web/read.mart-e.be/wallabag/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php line 29 {"exception":"[object] (Symfony\\Component\\ErrorHandler\\Error\\UndefinedMethodError(code: 0): Attempted to call an undefined method named \"getAttributes\" of class \"ReflectionClass\". at /srv/web/read.mart-e.be/wallabag/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php:29)"} []

mart-e avatar Aug 29 '23 11:08 mart-e

I also have the same issue with a webhost install, on both php 7.4 and 8.2.

minosimo avatar Nov 03 '23 14:11 minosimo

I have just updated from 2.6.6 to 2.6.7, cleared the var/cache/* and wallabag seems to work again just fine. Not sure if a coincidence or another package update but it seems solved for me.

mart-e avatar Nov 27 '23 17:11 mart-e

I had the same, it started working again and I didn't investigate what changed. 2.6.7 seems to work fine.

minosimo avatar Nov 27 '23 18:11 minosimo