新浪微博ERROR_CODE:21301.auth by Null spi问题解决

本文解决使用新浪微博openAPI进行微博分享时遇到的异常问题,原因是未进行SSO登录授权。解决方法是在调用upload方法前进行sso注册授权。

今天使用新浪微博的openAPI进行微博分享的时候出现如下异常:

{"error":"auth by Null spi!","error_code":21301,"request":"/2/statuses/update.json"}


原因是因为我在分享是没有进行SSO登录授权。

解决:在调用upload方法之前先进行sso注册授权就好了.


新浪微博的错误状态码对应的错误类型:http://open.weibo.com/wiki/Help/error

“”“{"productId":797253,"product":{"id":"UHJvZHVjdDo3OTcyNTM=","sku":"58700493","entityId":797253,"brand":{"name":"Starrett","defaultImage":{"url":"https://cdn11.bigcommerce.com/s-4s9liwcv/images/stencil/200w/o/starrett-logo-newpt1_1464897920__34055.original.gif"}},"availability":"Available","availabilityV2":{"status":"Available"},"warranty":"4 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Hardened Steel Blade, Cast Iron & Forged Steel Center, Protractor & Square Head","path":"/58700493/","name":"Starrett 4 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Hardened Steel Blade, Cast Iron & Forged Steel Center, Protractor & Square Head 56420 - 58700493","maxPurchaseQuantity":null,"addToCartUrl":"https://www.penntoolco.com/cart.php?action=add&product_id=797253","prices":{"price":{"value":675.15}},"customFields":{"edges":[]},"inventory":{"isInStock":true,"aggregated":null},"categories":{"edges":[{"node":{"name":"Precision Measuring Tools"}},{"node":{"name":"Dimensional Measuring Tools"}},{"node":{"name":"Squares, Combination Squares & Protractors"}},{"node":{"name":"Combination Squares & Accessories"}},{"node":{"name":"Combination Square Sets"}},{"node":{"name":"Starrett"}},{"node":{"name":"Precision Measuring Tools"}},{"node":{"name":"Dimensional Measuring Tools"}},{"node":{"name":"Squares, Combination Squares & Protractors"}},{"node":{"name":"Combination Squares & Accessories"}},{"node":{"name":"Combination Square Sets"}}]},"relatedProducts":{"edges":[{"node":{"id":"UHJvZHVjdDo3OTcyMTc=","sku":"86400777","entityId":797217,"availability":"Available","availabilityV2":{"status":"Available"},"warranty":"2 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Steel Blade, Cast Iron Square Head","path":"/86400777/","name":"Starrett 2 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Steel Blade, Cast Iron Square Head 56243 - 86400777","maxPurchaseQuantity":null,"addToCartUrl":"https://www.penntoolco.com/cart.php?action=add&product_id=797217","prices":{"price":{"value":216.73}},"customFields":{"edges":[]},"inventory":{"isInStock":true,"aggregated":null}}},{"node":{"id":"UHJvZHVjdDo3OTcyMzU=","sku":"86400371","entityId":797235,"availability":"Available","availabilityV2":{"status":"Available"},"warranty":"4 Piece, 11-3/4\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head","path":"/86400371/","name":"Starrett 4 Piece, 11-3/4\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 50047 - 86400371","maxPurchaseQuantity":null,"addToCartUrl":"https://www.penntoolco.com/cart.php?action=add&product_id=797235","prices":{"price":{"value":437.87}},"customFields":{"edges":[]},"inventory":{"isInStock":true,"aggregated":null}}},{"node":{"id":"UHJvZHVjdDo3OTcyNDA=","sku":"04025268","entityId":797240,"availability":"Available","availabilityV2":{"status":"Available"},"warranty":"4 Piece, 12\\\\" Combination Square Set 1/16, 1/32, 1/64 & 1/8\\\\" (4R) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head","path":"/04025268/","name":"Starrett 4 Piece, 12\\\\" Combination Square Set 1/16, 1/32, 1/64 & 1/8\\\\" (4R) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 66682 - 04025268","maxPurchaseQuantity":null,"addToCartUrl":"https://www.penntoolco.com/cart.php?action=add&product_id=797240","prices":{"price":{"value":428.13}},"customFields":{"edges":[]},"inventory":{"isInStock":true,"aggregated":null}}},{"node":{"id":"UHJvZHVjdDo3OTcxOTE=","sku":"60591575","entityId":797191,"availability":"Available","availabilityV2":{"status":"Available"},"warranty":"4 Piece, 12\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head","path":"/60591575/","name":"SPI 4 Piece, 12\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 13-276-1 - 60591575","maxPurchaseQuantity":null,"addToCartUrl":"https://www.penntoolco.com/cart.php?action=add&product_id=797191","prices":{"price":{"value":139.15}},"customFields":{"edges":[]},"inventory":{"isInStock":true,"aggregated":null}}},{"node":{"id":"UHJvZHVjdDo3OTcxOTI=","sku":"42614818","entityId":797192,"availability":"Available","availabilityV2":{"status":"Available"},"warranty":"4 Piece, 12\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head","path":"/42614818/","name":"SPI 4 Piece, 12\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 30-230-7 - 42614818","maxPurchaseQuantity":null,"addToCartUrl":"https://www.penntoolco.com/cart.php?action=add&product_id=797192","prices":{"price":{"value":401.8}},"customFields":{"edges":[]},"inventory":{"isInStock":true,"aggregated":null}}}]}},"cartId":null,"desc":"<p><a href=\\\\"https://www.penntoolco.com/starrett/\\\\" target=\\\\"_blank\\\\"><img title=\\\\"Starrett\\\\" src=\\\\"https://cdn11.bigcommerce.com/s-4s9liwcv/product_images/uploaded_images/starrett-logo2.jpg\\\\" alt=\\\\"Starrett\\\\" width=\\\\"200\\\\" height=\\\\"47\\\\" /></a></p><p><span style=\\\\"font-size: 12pt;\\\\">Starrett 4 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Hardened Steel Blade, Cast Iron & Forged Steel Center, Protractor & Square Head</span></p><p><span style=\\\\"font-size: 12pt;\\\\">Manufacturer Part #: 56420</span></p><p><span style=\\\\"font-size: 12pt;\\\\">S/N: 58700493</span></p><p><span style=\\\\"font-size: 12pt;\\\\">(Minimum Order Quantity=1, Package Quantity=1)</span></p><p><span style=\\\\"font-size: 12pt; color: #003366;\\\\"><strong>Specifications:</strong></span></p><table style=\\\\"border:2px solid black;border-collapse:collapse;\\\\"><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Number of Pieces</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">4, 4</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Blade Length (mm)</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">300.00</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Graduation Style</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Metric</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Graduation (mm)</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">0.5mm, 1mm</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Graduation (Inch)</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">0.5mm, 1mm</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Head Type</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Center, Protractor, Square</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Blade Material</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Hardened Steel</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Head Material</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Forged Steel</td></tr></table>","brandName":"Starrett","zoomSize":"1280x1280","productSize":"300x300","genericError":"Oops! Something went wrong.","maintenanceModeSettings":[],"adminBarLanguage":"{\\\\"locale\\\\":\\\\"en\\\\",\\\\"locales\\\\":{\\\\"admin.maintenance_header\\\\":\\\\"en\\\\",\\\\"admin.maintenance_tooltip\\\\":\\\\"en\\\\",\\\\"admin.maintenance_showstore_link\\\\":\\\\"en\\\\",\\\\"admin.prelaunch_header\\\\":\\\\"en\\\\",\\\\"admin.page_builder_link\\\\":\\\\"en\\\\"},\\\\"translations\\\\":{\\\\"admin.maintenance_header\\\\":\\\\"Your store is down for maintenance.\\\\",\\\\"admin.maintenance_tooltip\\\\":\\\\"Only administrators can view the store at the moment. Visit your control panel settings page to disable maintenance mode.\\\\",\\\\"admin.maintenance_showstore_link\\\\":\\\\"Click here to see what your visitors will see.\\\\",\\\\"admin.prelaunch_header\\\\":\\\\"Your storefront is private. Share your site with preview code:\\\\",\\\\"admin.page_builder_link\\\\":\\\\"Design this page in Page Builder\\\\"}}","urls":{"home":"https://www.penntoolco.com/","account":{"index":"/account.php","orders":{"all":"/account.php?action=order_status","completed":"/account.php?action=view_orders","save_new_return":"/account.php?action=save_new_return"},"update_action":"/account.php?action=update_account","returns":"/account.php?action=view_returns","addresses":"/account.php?action=address_book","inbox":"/account.php?action=inbox","send_message":"/account.php?action=send_message","add_address":"/account.php?action=add_shipping_address","wishlists":{"all":"/wishlist.php","add":"/wishlist.php?action=addwishlist","edit":"/wishlist.php?action=editwishlist","delete":"/wishlist.php?action=deletewishlist"},"details":"/account.php?action=account_details","recent_items":"/account.php?action=recent_items"},"brands":"https://www.penntoolco.com/brands/","gift_certificate":{"purchase":"/giftcertificates.php","redeem":"/giftcertificates.php?action=redeem","balance":"/giftcertificates.php?action=balance"},"auth":{"login":"/login.php","check_login":"/login.php?action=check_login","create_account":"/login.php?action=create_account","save_new_account":"/login.php?action=save_new_account","forgot_password":"/login.php?action=reset_password","send_password_email":"/login.php?action=send_password_email","save_new_password":"/login.php?action=save_new_password","logout":"/login.php?action=logout"},"product":{"post_review":"/postreview.php"},"cart":"/cart.php","checkout":{"single_address":"/checkout","multiple_address":"/checkout.php?action=multiple"},"rss":{"products":[]},"contact_us_submit":"/pages.php?action=sendContactForm","search":"/search.php","compare":"/compare","sitemap":"/sitemap.php","subscribe":{"action":"/subscribe.php"}},"secureBaseUrl":"https://www.penntoolco.com","channelId":1,"template":"pages/product","storefrontApiToken":"eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjaWQiOlsxXSwiY29ycyI6WyJodHRwczovL3d3dy5wZW5udG9vbGNvLmNvbSJdLCJlYXQiOjE3NTgyODA1NzcsImlhdCI6MTc1ODEwNzc3NywiaXNzIjoiQkMiLCJzaWQiOjY0Nzk3OCwic3ViIjoiQkMiLCJzdWJfdHlwZSI6MCwidG9rZW5fdHlwZSI6MX0.5xiAWrHvz30-RgOZSnKDaKCryXvsxqF-Zi7rWDDsp0R4cNx81ehHbeqwUe7hMsdCRZ6AFlbU8OFTaX2rdfj2Uw","brandSize":"250x250","validationDictionaryJSON":"{\\\\"locale\\\\":\\\\"en\\\\",\\\\"locales\\\\":{\\\\"validation_messages.valid_email\\\\":\\\\"en\\\\",\\\\"validation_messages.password\\\\":\\\\"en\\\\",\\\\"validation_messages.password_match\\\\":\\\\"en\\\\",\\\\"validation_messages.invalid_password\\\\":\\\\"en\\\\",\\\\"validation_messages.field_not_blank\\\\":\\\\"en\\\\",\\\\"validation_messages.certificate_amount\\\\":\\\\"en\\\\",\\\\"validation_messages.certificate_amount_range\\\\":\\\\"en\\\\",\\\\"validation_messages.price_min_evaluation\\\\":\\\\"en\\\\",\\\\"validation_messages.price_max_evaluation\\\\":\\\\"en\\\\",\\\\"validation_messages.price_min_not_entered\\\\":\\\\"en\\\\",\\\\"validation_messages.price_max_not_entered\\\\":\\\\"en\\\\",\\\\"validation_messages.price_invalid_value\\\\":\\\\"en\\\\",\\\\"validation_messages.invalid_gift_certificate\\\\":\\\\"en\\\\"},\\\\"translations\\\\":{\\\\"validation_messages.valid_email\\\\":\\\\"You must enter a valid email.\\\\",\\\\"validation_messages.password\\\\":\\\\"You must enter a password.\\\\",\\\\"validation_messages.password_match\\\\":\\\\"Your passwords do not match.\\\\",\\\\"validation_messages.invalid_password\\\\":\\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\\",\\\\"validation_messages.field_not_blank\\\\":\\\\" field cannot be blank.\\\\",\\\\"validation_messages.certificate_amount\\\\":\\\\"You must enter a gift certificate amount.\\\\",\\\\"validation_messages.certificate_amount_range\\\\":\\\\"You must enter a certificate amount between [MIN] and [MAX]\\\\",\\\\"validation_messages.price_min_evaluation\\\\":\\\\"Min. price must be less than max. price.\\\\",\\\\"validation_messages.price_max_evaluation\\\\":\\\\"Min. price must be less than max. price.\\\\",\\\\"validation_messages.price_min_not_entered\\\\":\\\\"Min. price is required.\\\\",\\\\"validation_messages.price_max_not_entered\\\\":\\\\"Max. price is required.\\\\",\\\\"validation_messages.price_invalid_value\\\\":\\\\"Input must be greater than 0.\\\\",\\\\"validation_messages.invalid_gift_certificate\\\\":\\\\"Please enter your valid certificate code.\\\\"}}","validationFallbackDictionaryJSON":"{\\\\"locale\\\\":\\\\"en\\\\",\\\\"locales\\\\":{\\\\"validation_fallback_messages.valid_email\\\\":\\\\"en\\\\",\\\\"validation_fallback_messages.password\\\\":\\\\"en\\\\",\\\\"validation_fallback_messages.password_match\\\\":\\\\"en\\\\",\\\\"validation_fallback_messages.invalid_password\\\\":\\\\"en\\\\",\\\\"validation_fallback_messages.field_not_blank\\\\":\\\\"en\\\\",\\\\"validation_fallback_messages.certificate_amount\\\\":\\\\"en\\\\",\\\\"validation_fallback_messages.certificate_amount_range\\\\":\\\\"en\\\\",\\\\"validation_fallback_messages.price_min_evaluation\\\\":\\\\"en\\\\",\\\\"validation_fallback_messages.price_max_evaluation\\\\":\\\\"en\\\\",\\\\"validation_fallback_messages.price_min_not_entered\\\\":\\\\"en\\\\",\\\\"validation_fallback_messages.price_max_not_entered\\\\":\\\\"en\\\\",\\\\"validation_fallback_messages.price_invalid_value\\\\":\\\\"en\\\\",\\\\"validation_fallback_messages.invalid_gift_certificate\\\\":\\\\"en\\\\"},\\\\"translations\\\\":{\\\\"validation_fallback_messages.valid_email\\\\":\\\\"You must enter a valid email.\\\\",\\\\"validation_fallback_messages.password\\\\":\\\\"You must enter a password.\\\\",\\\\"validation_fallback_messages.password_match\\\\":\\\\"Your passwords do not match.\\\\",\\\\"validation_fallback_messages.invalid_password\\\\":\\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\\",\\\\"validation_fallback_messages.field_not_blank\\\\":\\\\" field cannot be blank.\\\\",\\\\"validation_fallback_messages.certificate_amount\\\\":\\\\"You must enter a gift certificate amount.\\\\",\\\\"validation_fallback_messages.certificate_amount_range\\\\":\\\\"You must enter a certificate amount between [MIN] and [MAX]\\\\",\\\\"validation_fallback_messages.price_min_evaluation\\\\":\\\\"Min. price must be less than max. price.\\\\",\\\\"validation_fallback_messages.price_max_evaluation\\\\":\\\\"Min. price must be less than max. price.\\\\",\\\\"validation_fallback_messages.price_min_not_entered\\\\":\\\\"Min. price is required.\\\\",\\\\"validation_fallback_messages.price_max_not_entered\\\\":\\\\"Max. price is required.\\\\",\\\\"validation_fallback_messages.price_invalid_value\\\\":\\\\"Input must be greater than 0.\\\\",\\\\"validation_fallback_messages.invalid_gift_certificate\\\\":\\\\"Please enter your valid certificate code.\\\\"}}","validationDefaultDictionaryJSON":"{\\\\"locale\\\\":\\\\"en\\\\",\\\\"locales\\\\":{\\\\"validation_default_messages.valid_email\\\\":\\\\"en\\\\",\\\\"validation_default_messages.password\\\\":\\\\"en\\\\",\\\\"validation_default_messages.password_match\\\\":\\\\"en\\\\",\\\\"validation_default_messages.invalid_password\\\\":\\\\"en\\\\",\\\\"validation_default_messages.field_not_blank\\\\":\\\\"en\\\\",\\\\"validation_default_messages.certificate_amount\\\\":\\\\"en\\\\",\\\\"validation_default_messages.certificate_amount_range\\\\":\\\\"en\\\\",\\\\"validation_default_messages.price_min_evaluation\\\\":\\\\"en\\\\",\\\\"validation_default_messages.price_max_evaluation\\\\":\\\\"en\\\\",\\\\"validation_default_messages.price_min_not_entered\\\\":\\\\"en\\\\",\\\\"validation_default_messages.price_max_not_entered\\\\":\\\\"en\\\\",\\\\"validation_default_messages.price_invalid_value\\\\":\\\\"en\\\\",\\\\"validation_default_messages.invalid_gift_certificate\\\\":\\\\"en\\\\"},\\\\"translations\\\\":{\\\\"validation_default_messages.valid_email\\\\":\\\\"You must enter a valid email.\\\\",\\\\"validation_default_messages.password\\\\":\\\\"You must enter a password.\\\\",\\\\"validation_default_messages.password_match\\\\":\\\\"Your passwords do not match.\\\\",\\\\"validation_default_messages.invalid_password\\\\":\\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\\",\\\\"validation_default_messages.field_not_blank\\\\":\\\\"The field cannot be blank.\\\\",\\\\"validation_default_messages.certificate_amount\\\\":\\\\"You must enter a gift certificate amount.\\\\",\\\\"validation_default_messages.certificate_amount_range\\\\":\\\\"You must enter a certificate amount between [MIN] and [MAX]\\\\",\\\\"validation_default_messages.price_min_evaluation\\\\":\\\\"Min. price must be less than max. price.\\\\",\\\\"validation_default_messages.price_max_evaluation\\\\":\\\\"Min. price must be less than max. price.\\\\",\\\\"validation_default_messages.price_min_not_entered\\\\":\\\\"Min. price is required.\\\\",\\\\"validation_default_messages.price_max_not_entered\\\\":\\\\"Max. price is required.\\\\",\\\\"validation_default_messages.price_invalid_value\\\\":\\\\"Input must be greater than 0.\\\\",\\\\"validation_default_messages.invalid_gift_certificate\\\\":\\\\"Please enter your valid certificate code.\\\\"}}","carouselArrowAndDotAriaLabel":"Go to slide [SLIDE_NUMBER] of [SLIDES_QUANTITY]","carouselActiveDotAriaLabel":"active","carouselContentAnnounceMessage":"You are currently on slide [SLIDE_NUMBER] of [SLIDES_QUANTITY]","showSwatchNames":true,"productQuantityErrorMessage":"The quantity should contain only numbers","productInfo":{"sku":"58700493","url":"https://www.penntoolco.com/58700493/","add_this":[{"service":"facebook","annotation":""},{"service":"email","annotation":""},{"service":"print","annotation":""}],"gtin":null,"brand":{"name":"Starrett","url":"https://www.penntoolco.com/brands/Starrett.html"},"id":797253,"bulk_discount_rates":[],"can_purchase":true,"meta_description":"","category":["Precision Measuring Tools","Precision Measuring Tools/Dimensional Measuring Tools","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories/Combination Square Sets","Brands/Starrett","Brands/Starrett/Precision Measuring Tools","Brands/Starrett/Precision Measuring Tools/Dimensional Measuring Tools","Brands/Starrett/Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors","Starrett/Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories/Combination Square Sets"],"AddThisServiceButtonMeta":"","main_image":{"data":"https://cdn11.bigcommerce.com/s-4s9liwcv/images/stencil/{:size}/products/797253/978244/5870049-21__60661.1757024252.jpg?c=2","alt":"Starrett 4 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Hardened Steel Blade, Cast Iron & Forged Steel Center, Protractor & Square Head 56420 - 58700493"},"add_to_wishlist_url":"/wishlist.php?action=add&product_id=797253","shipping":{"calculated":true},"num_reviews":0,"weight":"3.80 LBS","description":"<p><a href=\\\\"https://www.penntoolco.com/starrett/\\\\" target=\\\\"_blank\\\\"><img title=\\\\"Starrett\\\\" src=\\\\"https://cdn11.bigcommerce.com/s-4s9liwcv/product_images/uploaded_images/starrett-logo2.jpg\\\\" alt=\\\\"Starrett\\\\" width=\\\\"200\\\\" height=\\\\"47\\\\" /></a></p><p><span style=\\\\"font-size: 12pt;\\\\">Starrett 4 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Hardened Steel Blade, Cast Iron & Forged Steel Center, Protractor & Square Head</span></p><p><span style=\\\\"font-size: 12pt;\\\\">Manufacturer Part #: 56420</span></p><p><span style=\\\\"font-size: 12pt;\\\\">S/N: 58700493</span></p><p><span style=\\\\"font-size: 12pt;\\\\">(Minimum Order Quantity=1, Package Quantity=1)</span></p><p><span style=\\\\"font-size: 12pt; color: #003366;\\\\"><strong>Specifications:</strong></span></p><table style=\\\\"border:2px solid black;border-collapse:collapse;\\\\"><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Number of Pieces</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">4, 4</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Blade Length (mm)</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">300.00</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Graduation Style</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Metric</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Graduation (mm)</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">0.5mm, 1mm</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Graduation (Inch)</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">0.5mm, 1mm</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Head Type</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Center, Protractor, Square</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Blade Material</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Hardened Steel</span></td></tr><tr><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Head Material</span></td><td style=\\\\"border: 1px solid #000000; padding: 5px;\\\\"><span style=\\\\"font-size: 12pt;\\\\">Forged Steel</td></tr></table>","tags":[],"warranty":"4 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Hardened Steel Blade, Cast Iron & Forged Steel Center, Protractor & Square Head","price":{"without_tax":{"formatted":"$675.15","value":675.15,"currency":"USD"},"tax_label":"Tax"},"detail_messages":"","availability":"","page_title":"","cart_url":"https://www.penntoolco.com/cart.php","max_purchase_quantity":0,"mpn":"56420","upc":null,"options":[],"related_products":[{"id":797217,"sku":"86400777","name":"Starrett 2 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Steel Blade, Cast Iron Square Head 56243 - 86400777","url":"https://www.penntoolco.com/86400777/","availability":"","rating":null,"brand":{"name":"Starrett"},"category":["Precision Measuring Tools","Precision Measuring Tools/Dimensional Measuring Tools","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories/Combination Square Sets","Brands/Starrett","Brands/Starrett/Precision Measuring Tools","Brands/Starrett/Precision Measuring Tools/Dimensional Measuring Tools","Brands/Starrett/Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors","Starrett/Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories/Combination Square Sets"],"summary":"Starrett 2 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Steel Blade, Cast Iron Square Head","image":{"data":"https://cdn11.bigcommerce.com/s-4s9liwcv/images/stencil/{:size}/products/797217/978208/8640077AA-21__30794.1757024235.jpg?c=2","alt":"Starrett 2 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Steel Blade, Cast Iron Square Head 56243 - 86400777"},"images":[{"data":"https://cdn11.bigcommerce.com/s-4s9liwcv/images/stencil/{:size}/products/797217/978208/8640077AA-21__30794.1757024235.jpg?c=2","alt":"Starrett 2 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Steel Blade, Cast Iron Square Head 56243 - 86400777"}],"date_added":"4th Sep 2025","pre_order":false,"show_cart_action":true,"has_options":false,"stock_level":null,"low_stock_level":null,"qty_in_cart":0,"custom_fields":null,"num_reviews":null,"weight":{"formatted":"1.50 LBS","value":1.5},"demo":false,"add_to_cart_url":"https://www.penntoolco.com/cart.php?action=add&product_id=797217","price":{"without_tax":{"currency":"USD","formatted":"$216.73","value":216.73},"tax_label":"Tax"},"add_to_wishlist_url":"/wishlist.php?action=add&product_id=797217"},{"id":797235,"sku":"86400371","name":"Starrett 4 Piece, 11-3/4\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 50047 - 86400371","url":"https://www.penntoolco.com/86400371/","availability":"","rating":null,"brand":{"name":"Starrett"},"category":["Precision Measuring Tools","Precision Measuring Tools/Dimensional Measuring Tools","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories/Combination Square Sets","Brands/Starrett","Brands/Starrett/Precision Measuring Tools","Brands/Starrett/Precision Measuring Tools/Dimensional Measuring Tools","Brands/Starrett/Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors","Starrett/Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories/Combination Square Sets"],"summary":"Starrett 4 Piece, 11-3/4\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protr","image":{"data":"https://cdn11.bigcommerce.com/s-4s9liwcv/images/stencil/{:size}/products/797235/978226/8640037-21__77968.1757024244.jpg?c=2","alt":"Starrett 4 Piece, 11-3/4\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 50047 - 86400371"},"images":[{"data":"https://cdn11.bigcommerce.com/s-4s9liwcv/images/stencil/{:size}/products/797235/978226/8640037-21__77968.1757024244.jpg?c=2","alt":"Starrett 4 Piece, 11-3/4\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 50047 - 86400371"}],"date_added":"4th Sep 2025","pre_order":false,"show_cart_action":true,"has_options":false,"stock_level":null,"low_stock_level":null,"qty_in_cart":0,"custom_fields":null,"num_reviews":null,"weight":{"formatted":"3.65 LBS","value":3.65},"demo":false,"add_to_cart_url":"https://www.penntoolco.com/cart.php?action=add&product_id=797235","price":{"without_tax":{"currency":"USD","formatted":"$437.87","value":437.87},"tax_label":"Tax"},"add_to_wishlist_url":"/wishlist.php?action=add&product_id=797235"},{"id":797240,"sku":"04025268","name":"Starrett 4 Piece, 12\\\\" Combination Square Set 1/16, 1/32, 1/64 & 1/8\\\\" (4R) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 66682 - 04025268","url":"https://www.penntoolco.com/04025268/","availability":"","rating":null,"brand":{"name":"Starrett"},"category":["Precision Measuring Tools","Precision Measuring Tools/Dimensional Measuring Tools","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories/Combination Square Sets","Brands/Starrett","Brands/Starrett/Precision Measuring Tools","Brands/Starrett/Precision Measuring Tools/Dimensional Measuring Tools","Brands/Starrett/Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors","Starrett/Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories/Combination Square Sets"],"summary":"Starrett 4 Piece, 12\\\\" Combination Square Set 1/16, 1/32, 1/64 & 1/8\\\\" (4R) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor","image":{"data":"https://cdn11.bigcommerce.com/s-4s9liwcv/images/stencil/{:size}/products/797240/978231/0402526AA-21__38127.1757024246.jpg?c=2","alt":"Starrett 4 Piece, 12\\\\" Combination Square Set 1/16, 1/32, 1/64 & 1/8\\\\" (4R) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 66682 - 04025268"},"images":[{"data":"https://cdn11.bigcommerce.com/s-4s9liwcv/images/stencil/{:size}/products/797240/978231/0402526AA-21__38127.1757024246.jpg?c=2","alt":"Starrett 4 Piece, 12\\\\" Combination Square Set 1/16, 1/32, 1/64 & 1/8\\\\" (4R) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 66682 - 04025268"}],"date_added":"4th Sep 2025","pre_order":false,"show_cart_action":true,"has_options":false,"stock_level":null,"low_stock_level":null,"qty_in_cart":0,"custom_fields":null,"num_reviews":null,"weight":{"formatted":"2.00 LBS","value":2},"demo":false,"add_to_cart_url":"https://www.penntoolco.com/cart.php?action=add&product_id=797240","price":{"without_tax":{"currency":"USD","formatted":"$428.13","value":428.13},"tax_label":"Tax"},"add_to_wishlist_url":"/wishlist.php?action=add&product_id=797240"},{"id":797191,"sku":"60591575","name":"SPI 4 Piece, 12\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 13-276-1 - 60591575","url":"https://www.penntoolco.com/60591575/","availability":"","rating":null,"brand":{"name":"SPI Swiss Precision Instruments"},"category":["Precision Measuring Tools","Precision Measuring Tools/Dimensional Measuring Tools","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories/Combination Square Sets","Brands/SPI Swiss Precision Instruments","Brands/SPI Swiss Precision Instruments/Precision Measuring Tools","Brands/SPI Swiss Precision Instruments/Precision Measuring Tools/Dimensional Measuring Tools","Brands/SPI Swiss Precision Instruments/Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors","SPI Swiss Precision Instruments/Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories/Combination Square Sets"],"summary":"SPI 4 Piece, 12\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/M","image":{"data":"https://cdn11.bigcommerce.com/s-4s9liwcv/images/stencil/{:size}/products/797191/978182/6059157-23__54019.1757024222.jpg?c=2","alt":"SPI 4 Piece, 12\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 13-276-1 - 60591575"},"images":[{"data":"https://cdn11.bigcommerce.com/s-4s9liwcv/images/stencil/{:size}/products/797191/978182/6059157-23__54019.1757024222.jpg?c=2","alt":"SPI 4 Piece, 12\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 13-276-1 - 60591575"}],"date_added":"4th Sep 2025","pre_order":false,"show_cart_action":true,"has_options":false,"stock_level":null,"low_stock_level":null,"qty_in_cart":0,"custom_fields":null,"num_reviews":null,"weight":{"formatted":"3.25 LBS","value":3.25},"demo":false,"add_to_cart_url":"https://www.penntoolco.com/cart.php?action=add&product_id=797191","price":{"without_tax":{"currency":"USD","formatted":"$139.15","value":139.15},"tax_label":"Tax"},"add_to_wishlist_url":"/wishlist.php?action=add&product_id=797191"},{"id":797192,"sku":"42614818","name":"SPI 4 Piece, 12\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 30-230-7 - 42614818","url":"https://www.penntoolco.com/42614818/","availability":"","rating":null,"brand":{"name":"SPI Swiss Precision Instruments"},"category":["Precision Measuring Tools","Precision Measuring Tools/Dimensional Measuring Tools","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories/Combination Square Sets","Brands/SPI Swiss Precision Instruments","Brands/SPI Swiss Precision Instruments/Precision Measuring Tools","Brands/SPI Swiss Precision Instruments/Precision Measuring Tools/Dimensional Measuring Tools","Brands/SPI Swiss Precision Instruments/Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors","SPI Swiss Precision Instruments/Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories","Precision Measuring Tools/Dimensional Measuring Tools/Squares, Combination Squares & Protractors/Combination Squares & Accessories/Combination Square Sets"],"summary":"SPI 4 Piece, 12\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/M","image":{"data":"https://cdn11.bigcommerce.com/s-4s9liwcv/images/stencil/{:size}/products/797192/978183/4261481-24__63046.1757024222.jpg?c=2","alt":"SPI 4 Piece, 12\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 30-230-7 - 42614818"},"images":[{"data":"https://cdn11.bigcommerce.com/s-4s9liwcv/images/stencil/{:size}/products/797192/978183/4261481-24__63046.1757024222.jpg?c=2","alt":"SPI 4 Piece, 12\\\\" Combination Square Set 1/32 & 1/64\\\\" (English/Metric) Graduation, Hardened Steel Blade, Cast Iron Center, Protractor & Square Head 30-230-7 - 42614818"}],"date_added":"4th Sep 2025","pre_order":false,"show_cart_action":true,"has_options":false,"stock_level":null,"low_stock_level":null,"qty_in_cart":0,"custom_fields":null,"num_reviews":null,"weight":{"formatted":"2.50 LBS","value":2.5},"demo":false,"add_to_cart_url":"https://www.penntoolco.com/cart.php?action=add&product_id=797192","price":{"without_tax":{"currency":"USD","formatted":"$401.80","value":401.8},"tax_label":"Tax"},"add_to_wishlist_url":"/wishlist.php?action=add&product_id=797192"}],"shipping_messages":[],"rating":0,"meta_keywords":"","show_quantity_input":1,"title":"Starrett 4 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Hardened Steel Blade, Cast Iron & Forged Steel Center, Protractor & Square Head 56420 - 58700493","gift_wrapping_available":false,"min_purchase_quantity":0,"customizations":[],"images":[{"data":"https://cdn11.bigcommerce.com/s-4s9liwcv/images/stencil/{:size}/products/797253/978244/5870049-21__60661.1757024252.jpg?c=2","alt":"Starrett 4 Piece, 300mm Combination Square Set 0.5 & 1mm (Metric) Graduation, Hardened Steel Blade, Cast Iron & Forged Steel Center, Protractor & Square Head 56420 - 58700493"}]}}”“” js = json.loads(jstr) json.decoder.JSONDecodeError: Expecting ',' delimiter: line 2 column 2319 (char 2319)
最新发布
09-19
/****************************************************************************** * Copyright (c) 2018-2018 TP-Link Systems Inc. * * Filename: tds_passthrough.c * Version: 1.0 * Description: TDS请求中,与透传相关的指令处理接口 * Author: liyijie<liyijie@tp-link.com.cn> * Date: 2019-02-15 ******************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "onvif_passthrough.h" #include "soap_parse.h" #include "soap_pack.h" #include "soap_auth.h" #include "soap_tds.h" #define REBOOT_MSG "Rebooting in 30 seconds" #ifndef ARRAY_LEN #define ARRAY_LEN(x) (sizeof(x) / sizeof((x)[0])) #endif /********************************************************************************* * tds:SetSystemDateAndTime *********************************************************************************/ /****************************************************************************** * 函数名称: soap_out_tds_set_sys_time_rsp() * 函数描述: 组装tds:SetSystemDateAndTimeResponse element内容 * 输 入: xml_buf -- 存放输出xml字串的内存地址 * data -- 为空 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 soap_out_tds_set_sys_time_rsp(ONVIF_BUF *xml_buf, void *data) { /* tds:SetSystemDateAndTimeResponse */ if (xml_buf == NULL) { ONVIF_WARN("xml_buf == NULL."); return ERROR; } /* tds:SetSystemDateAndTimeResponse */ SOAP_IF_FAIL_RET(soap_element(xml_buf, "tds:SetSystemDateAndTimeResponse", NULL, NULL)); return OK; } /****************************************************************************** * 函数名称: tds_set_sys_time_rsp() * 函数描述: tds:SetSystemDateAndTime请求的应答报文构造函数 * 输 入: soap -- soap结构体 * json_rsp -- 应答的json数据 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_sys_time_json_to_xml(SOAP_CONTEXT *soap, JSON_OBJ *json_rsp) { if (soap == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetSystemDateAndTime rsp."); return soap_generate_xml((p_out_fun)(soap_out_tds_set_sys_time_rsp), soap, NULL); } LOCAL BOOL cloud_storage_on() { CSTG_UPLOAD_ENABLE cstg_upload_enable = {0}; ds_read(CSTG_UPLOAD_ENABLE_PATH, &cstg_upload_enable, sizeof(CSTG_UPLOAD_ENABLE)); return cstg_upload_enable.enable; } LOCAL int check_onvif_set_sys_time(TT_DATE_TIME *time) { if (time == NULL || time->second < 0 || time->second >= 60 || time->minute < 0 || time->minute >= 60 || time->hour < 0 || time->hour >=24 || time->day < 0 || time->month < 0 || time->month > 12 || time->year < 0) { return ERROR; } switch (time->month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: if (time->day > 31) { return ERROR; } break; case 4: case 6: case 9: case 11: if (time->day > 30) { return ERROR; } break; case 2: if (time->year % 400 == 0 || (time->year % 4 == 0 && time->year % 100 != 0)) { if (time->day > 29) { return ERROR; } } else { if (time->day > 28) { return ERROR; } } default: return ERROR; } return OK; } /****************************************************************************** * 函数名称: tds_set_sys_time_req_parse() * 函数描述: 解析tds:SetSystemDateAndTime请求的具体内容 * 输 入: soap -- soap结构体 * 输 出: json_req -- 根据请求构造的json object * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_sys_time_xml_to_json(SOAP_CONTEXT *soap, JSON_OBJ **json_req) { TIMING_MODE timing_mode = 0; TT_DATE_TIME time = {0}; time_t sec_from_1970 = 0; JSON_OBJ *json_obj = NULL; JSON_OBJ *json_sec = NULL; JSON_OBJ *json_opt = NULL; JSON_OBJ *json_opt2 = NULL; S32 request_len = 0; S32 ch = 0; char *xml_start = NULL; char *xml_str = NULL; char **p = NULL; char charbuf[LEN_INFO] = {0}; char time_zone[LEN_INFO] = {0}; TIME_CALIBRATION time_cali = {0}; int dst_enabled = 0; int have_dst_rule = 0; char *find_rule; int ret_stime = 0; int set_timezome = 0; if (soap == NULL || json_req == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetSystemDateAndTime parse."); /* 需确认是否支持onvif设置系统时间和日期 */ if (OK != soap_usernametoken_auth(soap, UM_OPERATOR)) { ONVIF_TRACE("Auth failed\n"); soap_fault(soap, "SOAP-ENV:Sender", "ter:NotAuthorized", NULL, "Authority failure"); soap->error = 400; return ERROR; } /* 分析SetSystemDateAndTime请求的具体内容 */ if (soap->request_begin != NULL && soap->request_end != NULL) { request_len = soap->request_end - soap->request_begin; if (request_len < 0) { ONVIF_WARN("request_len < 0."); goto error_parse; } xml_str = xml_start = soap->request_begin; p = (char **)&xml_str; } else { ONVIF_ERROR("soap request content is NULL."); return ERROR; } while (((*p) - xml_start) < request_len) { if ((ch = soap_get_tag(xml_start, request_len, p, charbuf, sizeof(charbuf))) == EOF) { goto error_parse; } if (charbuf[0] == '/') { continue; } if (TRUE == soap_match_tag(charbuf, "DateTimeType")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } ONVIF_TRACE("tds:DateTimeType: %s", charbuf); timing_mode = (strcmp(charbuf, "NTP") == 0) ? TIMING_MODE_NTP : TIMING_MODE_MANUAL; continue; } if (TRUE == soap_match_tag(charbuf, "DaylightSavings")) { /* 暂不需要同步DaylightSavings */ if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } ONVIF_TRACE("tds:DaylightSavings: %s", charbuf); dst_enabled = (strcmp(charbuf, "true") == 0) ? 1 : 0; continue; } if (TRUE == soap_match_tag(charbuf, "TimeZone")) { /* 暂不需要同步时区 */ continue; } if (TRUE == soap_match_tag(charbuf, "TZ")) { /* 暂不需要同步时区 */ if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } ONVIF_TRACE("tds:TZ: %s", charbuf); if (0 == strncmp(charbuf, "INVALIDTIMEZONE", 15)) { soap_fault(soap, "SOAP-ENV:Sender", "ter:InvalidArgVal", "ter:InvalidTimeZone", "error timezone"); soap->error = SOAP_FAULT; goto error_parse; } /* PST,UTC-08:00只用于适配过onvif认证 */ else if (!strncmp(charbuf, "PST", 3) || !strncmp(charbuf, "UTC-08:00", 9)) { set_timezome = 1; strncpy(time_zone, charbuf, LEN_INFO - 1); } find_rule = strstr(charbuf,","); if (find_rule != NULL) { have_dst_rule = 1; } else { have_dst_rule = 0; } continue; } if (TRUE == soap_match_tag(charbuf, "UTCDateTime")) { continue; } if (TRUE == soap_match_tag(charbuf, "Time")) { continue; } if (TRUE == soap_match_tag(charbuf, "Hour")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } ONVIF_TRACE("tt:Hour: %s", charbuf); time.hour = atoi(charbuf); continue; } if (TRUE == soap_match_tag(charbuf, "Minute")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } ONVIF_TRACE("tt:Minute: %s", charbuf); time.minute = atoi(charbuf); continue; } if (TRUE == soap_match_tag(charbuf, "Second")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } ONVIF_TRACE("tt:Second: %s", charbuf); time.second = atoi(charbuf); continue; } if (TRUE == soap_match_tag(charbuf, "Date")) { continue; } if (TRUE == soap_match_tag(charbuf, "Year")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } ONVIF_TRACE("tt:Year: %s", charbuf); time.year = atoi(charbuf); continue; } if (TRUE == soap_match_tag(charbuf, "Month")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } ONVIF_TRACE("tt:Month: %s", charbuf); time.month = atoi(charbuf); continue; } if (TRUE == soap_match_tag(charbuf, "Day")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } ONVIF_TRACE("tt:Day: %s", charbuf); time.day = atoi(charbuf); continue; } } /* 组织json object */ json_obj = jso_new_obj(); json_sec = jso_new_obj(); json_opt = jso_new_obj(); json_opt2 = jso_new_obj(); if (json_obj == NULL || json_sec == NULL || json_opt == NULL || json_opt2 == NULL) { ONVIF_TRACE("jso_new_obj error."); jso_free_obj(json_obj); jso_free_obj(json_sec); jso_free_obj(json_opt); jso_free_obj(json_opt2); return ERROR; } jso_add_string(json_obj, "method", "set"); jso_obj_add(json_obj, "system", json_sec); jso_obj_add(json_sec, "basic", json_opt); jso_obj_add(json_sec, "dst", json_opt2); if (set_timezome) { ONVIF_WARN("set timezome"); jso_add_string(json_opt, "timezone", time_zone); jso_add_string(json_opt, "zone_id", "America/Los_Angeles"); /* UTC-08:00对应的唯一地区 */ } if (timing_mode == TIMING_MODE_NTP || cloud_storage_on()) { jso_add_string(json_opt, "timing_mode", "ntp"); } else { jso_add_string(json_opt, "timing_mode", "manual"); if (check_onvif_set_sys_time(&time) == ERROR) { soap_fault(soap, "SOAP-ENV:Sender", "ter:InvalidArgVal", "ter:InvalidDateTime", "error time"); soap->error = SOAP_FAULT; goto error_out; } /* 同步时间 */ sec_from_1970 = soap_mk_time(time.year, time.month, time.day, time.hour, time.minute, time.second); /* --946656000=2000/1/1 0:0:0 */ if (sec_from_1970 < 946656000) { ONVIF_TRACE("set time < 2000/1/1 0:0:0."); goto error_out; } ret_stime = nvmp_set_time(sec_from_1970, USER_CALIBRATION); if (OK == ret_stime) { ONVIF_DEBUG("set time successfully."); /* nvr设置为手动校时,校时成功后发手动校时成功消息出来 */ time_cali.type = USER_CALIBRATION; time_cali.status = TIME_CALIBRATION_SUCC; NSD_SEND(TIME_CALIBRATION_MSG_ID, (U8*)&time_cali, sizeof(TIME_CALIBRATION)); } else { ONVIF_ERROR("set time error: %d", ret_stime); } } /* 还需要添加夏令时的enabled进入json_obj里,等到夏令时模块添加后再加相关代码 */ if (dst_enabled && have_dst_rule) { jso_add_string(json_opt2, "enabled", "1"); } else { jso_add_string(json_opt2, "enabled", "0"); } *json_req = json_obj; return OK; error_out: jso_free_obj(json_obj); error_parse: return ERROR; } /********************************************************************************* * tds:SetSystemFactoryDefault *********************************************************************************/ /****************************************************************************** * 函数名称: soap_out_tds_set_sys_factory_default_rsp() * 函数描述: 组装tds:SetSystemFactoryDefaultResponse element内容 * 输 入: xml_buf -- 存放输出xml字串的内存地址 * data -- 为空 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 soap_out_tds_set_sys_factory_default_rsp(ONVIF_BUF *xml_buf, void *data) { /* tds:SetSystemFactoryDefaultResponse */ if (xml_buf == NULL) { ONVIF_TRACE("xml_buf == NULL."); return ERROR; } /* tds:SetSystemFactoryDefaultResponse */ SOAP_IF_FAIL_RET(soap_element(xml_buf, "tds:SetSystemFactoryDefaultResponse", NULL, NULL)); return OK; } /****************************************************************************** * 函数名称: tds_set_sys_factory_default_json_to_xml() * 函数描述: tds:SetSystemFactoryDefault请求的应答报文构造函数 * 输 入: soap -- soap结构体 * json_rsp -- 应答的json数据 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_sys_factory_default_json_to_xml(SOAP_CONTEXT *soap, JSON_OBJ *json_rsp) { if (soap == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetSystemFactoryDefault rsp."); return soap_generate_xml((p_out_fun)(soap_out_tds_set_sys_factory_default_rsp), soap, NULL); } /****************************************************************************** * 函数名称: tds_set_sys_factory_default_xml_to_json() * 函数描述: 解析tds:SetSystemFactoryDefault请求的具体内容 * 输 入: soap -- soap结构体 * 输 出: json_req -- 根据请求构造的json object * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_sys_factory_default_xml_to_json(SOAP_CONTEXT *soap, JSON_OBJ **json_req) { JSON_OBJ *json_obj = NULL; JSON_OBJ *json_sec = NULL; if (soap == NULL || json_req == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetSystemFactoryDefault parse."); /* 需要鉴权 */ if (OK != soap_usernametoken_auth(soap, UM_OPERATOR)) { ONVIF_TRACE("Auth failed\n"); soap_fault(soap, "SOAP-ENV:Sender", "ter:NotAuthorized", NULL, "Authority failure"); soap->error = 400; return ERROR; } /* 不需要分析SetSystemFactoryDefault请求的具体内容 */ /* 组织json object */ json_obj = jso_new_obj(); json_sec = jso_new_obj(); if (json_obj == NULL || json_sec == NULL) { ONVIF_TRACE("jso_new_obj error."); jso_free_obj(json_obj); jso_free_obj(json_sec); return ERROR; } jso_add_string(json_obj, "method", "do"); jso_obj_add(json_obj, "system", json_sec); jso_add_string(json_sec, "reset", "null"); *json_req = json_obj; return OK; } /********************************************************************************* * tds:SystemReboot *********************************************************************************/ /****************************************************************************** * 函数名称: soap_out_tds_sys_reboot_rsp() * 函数描述: 组装tds:SystemRebootResponse element内容 * 输 入: xml_buf -- 存放输出xml字串的内存地址 * data -- 为空 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 soap_out_tds_sys_reboot_rsp(ONVIF_BUF *xml_buf, void *data) { /* tds:SystemRebootResponse */ if (xml_buf == NULL) { ONVIF_TRACE("xml_buf == NULL."); return ERROR; } /* tds:SystemRebootResponse begin */ SOAP_IF_FAIL_RET(soap_element_begin_out(xml_buf, "tds:SystemRebootResponse", NULL)); /* tds:Message */ SOAP_IF_FAIL_RET(soap_element(xml_buf, "tds:Message", REBOOT_MSG, NULL)); /* tds:SystemRebootResponse end */ SOAP_IF_FAIL_RET(soap_element_end_out(xml_buf, "tds:SystemRebootResponse")); return OK; } /****************************************************************************** * 函数名称: tds_sys_reboot_json_to_xml() * 函数描述: tds:SystemReboot请求的应答报文构造函数 * 输 入: soap -- soap结构体 * json_rsp -- 应答的json数据 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_sys_reboot_json_to_xml(SOAP_CONTEXT *soap, JSON_OBJ *json_rsp) { if (soap == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SystemReboot rsp."); return soap_generate_xml((p_out_fun)(soap_out_tds_sys_reboot_rsp), soap, NULL); } /****************************************************************************** * 函数名称: tds_sys_reboot_xml_to_json() * 函数描述: 解析tds:SystemReboot请求的具体内容 * 输 入: soap -- soap结构体 * 输 出: json_req -- 根据请求构造的json object * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_sys_reboot_xml_to_json(SOAP_CONTEXT *soap, JSON_OBJ **json_req) { JSON_OBJ *json_obj = NULL; JSON_OBJ *json_sec = NULL; if (soap == NULL || json_req == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SystemReboot parse."); /* 需要鉴权 */ if (OK != soap_usernametoken_auth(soap, UM_OPERATOR)) { ONVIF_TRACE("Auth failed\n"); soap_fault(soap, "SOAP-ENV:Sender", "ter:NotAuthorized", NULL, "Authority failure"); soap->error = 400; return ERROR; } /* 不需要分析SetSystemFactoryDefault请求的具体内容 */ /* 组织json object */ json_obj = jso_new_obj(); json_sec = jso_new_obj(); if (json_obj == NULL || json_sec == NULL) { ONVIF_TRACE("jso_new_obj error."); jso_free_obj(json_obj); jso_free_obj(json_sec); return ERROR; } jso_add_string(json_obj, "method", "do"); jso_obj_add(json_obj, "system", json_sec); jso_add_string(json_sec, "reboot", "null"); *json_req = json_obj; return OK; } /********************************************************************************* * tds:SetUser *********************************************************************************/ /****************************************************************************** * 函数名称: soap_out_tds_set_dns_rsp() * 函数描述: 组装tds:SetDNSResponse element内容 * 输 入: xml_buf -- 存放输出xml字串的内存地址 * data -- 为空 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 soap_out_tds_set_dns_rsp(ONVIF_BUF *xml_buf, void *data) { /* tds:SetDNSResponse */ if (xml_buf == NULL) { ONVIF_TRACE("xml_buf == NULL."); return ERROR; } /* tds:SetDNSResponse */ SOAP_IF_FAIL_RET(soap_element(xml_buf, "tds:SetDNSResponse", NULL, NULL)); return OK; } /****************************************************************************** * 函数名称: tds_set_dns_json_to_xml() * 函数描述: tds:SetDNS请求的应答报文构造函数 * 输 入: soap -- soap结构体 * json_rsp -- 应答的json数据 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_dns_json_to_xml(SOAP_CONTEXT *soap, JSON_OBJ *json_rsp) { if (soap == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetDNS rsp."); return soap_generate_xml((p_out_fun)(soap_out_tds_set_dns_rsp), soap, NULL); } /****************************************************************************** * 函数名称: soap_out_tds_set_ntp_rsp() * 函数描述: 组装tds:SetNTPResponse element内容 * 输 入: xml_buf -- 存放输出xml字串的内存地址 * data -- 为空 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 soap_out_tds_set_ntp_rsp(ONVIF_BUF *xml_buf, void *data) { /* tds:SetDNSResponse */ if (xml_buf == NULL) { ONVIF_TRACE("xml_buf == NULL."); return ERROR; } /* tds:SetDNSResponse */ SOAP_IF_FAIL_RET(soap_element(xml_buf, "tds:SetNTPResponse", NULL, NULL)); return OK; } /****************************************************************************** * 函数名称: tds_set_ntp_json_to_xml() * 函数描述: tds:SetNTP请求的应答报文构造函数 * 输 入: soap -- soap结构体 * json_rsp -- 应答的json数据 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_ntp_json_to_xml(SOAP_CONTEXT *soap, JSON_OBJ *json_rsp) { S32 error_code = 0; if (soap == NULL || NULL == json_rsp) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetNTP rsp."); if (OK != jso_obj_get_int(json_rsp, "error_code", &error_code)) { ONVIF_TRACE("no error code"); return ERROR; } if (0 != error_code) { ONVIF_TRACE("get information error, error_code = [%d]", error_code); soap_fault(soap, "SOAP-ENV:Sender", "ter:InvalidArgVal", "ter:ConfigModify", "failed"); soap->error = SOAP_FAULT; return ERROR; } return soap_generate_xml((p_out_fun)(soap_out_tds_set_ntp_rsp), soap, NULL); } /****************************************************************************** * 函数名称: tds_set_dns_xml_to_json() * 函数描述: tds:SetDNS请求的处理函数 * 输 入: soap -- soap结构体 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_dns_xml_to_json(SOAP_CONTEXT *soap, JSON_OBJ **json_req) { JSON_OBJ *json_obj = NULL; JSON_OBJ *json_sec = NULL; JSON_OBJ *json_opt = NULL; S32 request_len = 0; S32 ch = 0; char *xml_start = NULL; char *xml_str = NULL; char **p = NULL; char charbuf[LEN_INFO * 2] = {0}; char temp_dns[2][STR_IP_LEN] = {{0}}; BOOL DHCP_flag = FALSE; if (soap == NULL || json_req == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetDNS parse."); /* 需要鉴权 */ if (OK != soap_usernametoken_auth(soap, UM_OPERATOR)) { ONVIF_TRACE("Auth failed\n"); soap_fault(soap, "SOAP-ENV:Sender", "ter:NotAuthorized", NULL, "Authority failure"); soap->error = 400; return ERROR; } /* 分析SetDNS请求的具体内容 */ if (soap->request_begin != NULL && soap->request_end != NULL) { request_len = soap->request_end - soap->request_begin; if (request_len < 0) { ONVIF_TRACE("request_len < 0."); goto error_parse; } xml_str = xml_start = soap->request_begin; p = (char **)&xml_str; } else { ONVIF_ERROR("soap request content is NULL."); return ERROR; } while (((*p) - xml_start) < request_len) { if ((ch = soap_get_tag(xml_start, request_len, p, charbuf, sizeof(charbuf))) == EOF) { goto error_parse; } if (charbuf[0] == '/') { continue; } if (TRUE == soap_match_tag(charbuf, "FromDHCP")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } ONVIF_TRACE("FromDHCP: %s", charbuf); if (0 == strcasecmp(charbuf, "True")) { DHCP_flag = TRUE; } } if (TRUE == soap_match_tag(charbuf, "IPv4Address")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } ONVIF_TRACE("IPv4Address: %s", charbuf); if ('\0' == temp_dns[0][0]) { snprintf(temp_dns[0], STR_IP_LEN, "%s", charbuf); } else if ('\0' == temp_dns[1][0]) { snprintf(temp_dns[1], STR_IP_LEN, "%s", charbuf); } } } ONVIF_INFO("Set dns(dhcp %s):%s, %s", DHCP_flag ? "on" : "off", temp_dns[0], temp_dns[1]); /* 组织json object */ json_obj = jso_new_obj(); json_sec = jso_new_obj(); json_opt = jso_new_obj(); if (json_obj == NULL || json_sec == NULL || json_opt == NULL) { ONVIF_TRACE("jso_new_obj error."); jso_free_obj(json_obj); jso_free_obj(json_sec); jso_free_obj(json_opt); goto error_parse; } jso_add_string(json_obj, "method", "set"); jso_obj_add(json_obj, "protocol", json_sec); jso_obj_add(json_sec, "wan", json_opt); if (TRUE == DHCP_flag) { jso_add_string(json_opt, "wan_type", "dhcp"); jso_add_string(json_opt, "proto", "dhcp"); } else { jso_add_string(json_opt, "wan_type", "static"); jso_add_string(json_opt, "proto", "static"); json_opt = jso_new_obj(); jso_obj_add(json_sec, "static", json_opt); if ('\0' != temp_dns[0][0]) { jso_add_string(json_opt, "pri_dns", temp_dns[0]); } if ('\0' != temp_dns[1][0]) { jso_add_string(json_opt, "snd_dns", temp_dns[1]); } } *json_req = json_obj; return OK; error_parse: return ERROR; } /****************************************************************************** * 函数名称: tds_set_ntp_xml_to_json() * 函数描述: tds:SetNTP请求的处理函数 * 输 入: soap -- soap结构体 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_ntp_xml_to_json(SOAP_CONTEXT *soap, JSON_OBJ **json_req) { JSON_OBJ *json_obj = NULL; JSON_OBJ *json_sec = NULL; JSON_OBJ *json_sec2 = NULL; JSON_OBJ *json_opt = NULL; JSON_OBJ *json_opt2 = NULL; S32 request_len = 0; S32 ch = 0; char *xml_start = NULL; char *xml_str = NULL; char **p = NULL; char charbuf[LEN_INFO] = {0}; char ip_addr[LEN_VALUE] = {0}; BOOL have_dhcp = FALSE; BOOL dhcp_flag = FALSE; if (soap == NULL || json_req == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetNTP parse."); /* 需要鉴权 */ if (OK != soap_usernametoken_auth(soap, UM_OPERATOR)) { ONVIF_TRACE("Auth failed\n"); soap_fault(soap, "SOAP-ENV:Sender", "ter:NotAuthorized", NULL, "Authority failure"); soap->error = 400; return ERROR; } /* 分析SetNetworkInterfaces请求的具体内容 */ if (soap->request_begin != NULL && soap->request_end != NULL) { request_len = soap->request_end - soap->request_begin; if (request_len < 0) { ONVIF_TRACE("request_len < 0."); goto error_parse; } xml_str = xml_start = soap->request_begin; p = (char **)&xml_str; } else { soap_fault(soap, "SOAP-ENV:Sender", "ter:InvalidArgVal", NULL, "no content"); soap->error = SOAP_FAULT; ONVIF_ERROR("soap request content is NULL."); return ERROR; } while (((*p) - xml_start) < request_len) { if ((ch = soap_get_tag(xml_start, request_len, p, charbuf, sizeof(charbuf))) == EOF) { goto error_parse; } if (charbuf[0] == '/') { continue; } if (TRUE == soap_match_tag(charbuf, "FromDHCP")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } have_dhcp = TRUE; if (0 == strcasecmp(charbuf, "true")) { dhcp_flag = TRUE; } } else if (TRUE == soap_match_tag(charbuf, "Type")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } ONVIF_TRACE("Type: %s.", charbuf); if (strcasecmp(charbuf, "IPv4")) { ONVIF_ERROR("IP Type: %s is not supported.", charbuf); /* IPv6设置NTP IP也用该函数,暂未支持,此处先做打印提示 */ } } else if (TRUE == soap_match_tag(charbuf, "IPv4Address")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } ONVIF_TRACE("IPv4Address: %s.", charbuf); snprintf(ip_addr, LEN_VALUE, "%s", charbuf); } } /* 组织json object */ json_obj = jso_new_obj(); json_sec = jso_new_obj(); json_opt = jso_new_obj(); if (json_obj == NULL || json_sec == NULL || json_opt == NULL) { ONVIF_ERROR("jso_new_obj error."); goto error_parse; } jso_add_string(json_obj, "method", "set"); if(have_dhcp) { json_sec2 = jso_new_obj(); json_opt2 = jso_new_obj(); if (json_sec2 == NULL || json_opt2 == NULL) { ONVIF_ERROR("jso_new_obj error."); goto error_parse; } jso_obj_add(json_obj, "network", json_sec2); jso_obj_add(json_sec2, "wan_status", json_opt2); if (TRUE == dhcp_flag) { jso_add_string(json_opt2, "proto", "dhcp"); } else { jso_add_string(json_opt2, "proto", "static"); } } jso_obj_add(json_obj, "system", json_sec); jso_obj_add(json_sec, "ntp", json_opt); jso_add_string(json_opt, "server", ip_addr); *json_req = json_obj; return OK; error_parse: soap_fault(soap, "SOAP-ENV:Sender", "ter:InvalidArgVal", NULL, "error"); soap->error = SOAP_FAULT; jso_free_obj(json_opt); jso_free_obj(json_opt2); jso_free_obj(json_sec2); jso_free_obj(json_sec); jso_free_obj(json_obj); return ERROR; } /****************************************************************************** * 函数名称: soap_out_tds_set_hostname_rsp() * 函数描述: 组装tds:SetHostnameResponse element内容 * 输 入: xml_buf -- 存放输出xml字串的内存地址 * data -- 为空 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 soap_out_tds_set_hostname_rsp(ONVIF_BUF *xml_buf, void *data) { /* tds:SetHostnameResponse */ if (xml_buf == NULL) { ONVIF_TRACE("xml_buf == NULL."); return ERROR; } /* tds:SetHostnameResponse */ SOAP_IF_FAIL_RET(soap_element(xml_buf, "tds:SetHostnameResponse", NULL, NULL)); return OK; } /****************************************************************************** * 函数名称: tds_set_hostname_json_to_xml() * 函数描述: tds:SetHostname请求的应答报文构造函数 * 输 入: soap -- soap结构体 * json_rsp -- 应答的json数据 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_hostname_json_to_xml(SOAP_CONTEXT *soap, JSON_OBJ *json_rsp) { S32 error_code = 0; if (soap == NULL || NULL == json_rsp) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetHostname rsp."); if (OK != jso_obj_get_int(json_rsp, "error_code", &error_code)) { ONVIF_TRACE("no error code"); return ERROR; } if (0 != error_code) { ONVIF_TRACE("get information error, error_code = [%d]", error_code); soap_fault(soap, "SOAP-ENV:Sender", "ter:InvalidArgVal", "ter:ConfigModify", "failed"); soap->error = SOAP_FAULT; return ERROR; } return soap_generate_xml((p_out_fun)(soap_out_tds_set_hostname_rsp), soap, NULL); } /****************************************************************************** * 函数名称: tds_set_hostname_xml_to_json() * 函数描述: tds:SetHostname请求的处理函数 * 输 入: soap -- soap结构体 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_hostname_xml_to_json(SOAP_CONTEXT *soap, JSON_OBJ **json_req) { JSON_OBJ *json_obj = NULL; JSON_OBJ *json_sec = NULL; JSON_OBJ *json_opt = NULL; S32 request_len = 0; S32 ch = 0; char *xml_start = NULL; char *xml_str = NULL; char **p = NULL; char charbuf[LEN_INFO] = {0}; char name[LEN_VALUE] = {0}; int i; if (soap == NULL || json_req == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetHostname parse."); /* 需要鉴权 */ if (OK != soap_usernametoken_auth(soap, UM_OPERATOR)) { ONVIF_TRACE("Auth failed\n"); soap_fault(soap, "SOAP-ENV:Sender", "ter:NotAuthorized", NULL, "Authority failure"); soap->error = 400; return ERROR; } /* 分析SetHostname请求的具体内容 */ if (soap->request_begin != NULL && soap->request_end != NULL) { request_len = soap->request_end - soap->request_begin; if (request_len < 0) { ONVIF_TRACE("request_len < 0."); goto error_out; } xml_str = xml_start = soap->request_begin; p = (char **)&xml_str; } else { soap_fault(soap, "SOAP-ENV:Sender", "ter:InvalidArgVal", NULL, "no content"); soap->error = SOAP_FAULT; ONVIF_ERROR("soap request content is NULL."); return ERROR; } while (((*p) - xml_start) < request_len) { if ((ch = soap_get_tag(xml_start, request_len, p, charbuf, sizeof(charbuf))) == EOF) { goto error_out; } if (charbuf[0] == '/') { continue; } if (TRUE == soap_match_tag(charbuf, "Name")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_out; } ONVIF_TRACE("Name: %s.", charbuf); snprintf(name, LEN_TAG, "%s", charbuf); for (i = 0; i < strlen(name); i++) { /* 根据RFC 952和RFC 1123,hostname字符取值范围为数字, 字母, '-', '.' */ if ((name[i] < '0' || (name[i] > '9' && name[i] < 'A') || (name[i] > 'Z' && name[i] < 'a') || name[i] > 'z') && name[i] != '-' && name[i] != '.') { goto error_out; } } } } /* 组织json object */ json_obj = jso_new_obj(); json_sec = jso_new_obj(); json_opt = jso_new_obj(); if (json_obj == NULL || json_sec == NULL || json_opt == NULL) { ONVIF_ERROR("jso_new_obj error."); goto error_out; } jso_add_string(json_obj, "method", "set"); jso_obj_add(json_obj, "protocol", json_sec); jso_obj_add(json_sec, "dhcp", json_opt); jso_add_string(json_opt, "hostname", name); *json_req = json_obj; return OK; error_out: soap_fault(soap, "SOAP-ENV:Sender", "ter:InvalidArgVal", "ter:InvalidHostname", "error"); soap->error = SOAP_FAULT; jso_free_obj(json_opt); jso_free_obj(json_sec); jso_free_obj(json_obj); return ERROR; } /****************************************************************************** * 函数名称: soap_out_tds_set_gateway_rsp() * 函数描述: 组装tds:SetNetworkDefaultGatewayResponse element内容 * 输 入: xml_buf -- 存放输出xml字串的内存地址 * data -- 为空 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 soap_out_tds_set_gateway_rsp(ONVIF_BUF *xml_buf, void *data) { /* tds:SetNetworkDefaultGatewayResponse */ if (xml_buf == NULL) { ONVIF_TRACE("xml_buf == NULL."); return ERROR; } /* tds:SetNetworkDefaultGatewayResponse */ SOAP_IF_FAIL_RET(soap_element(xml_buf, "tds:SetNetworkDefaultGatewayResponse", NULL, NULL)); return OK; } /****************************************************************************** * 函数名称: tds_set_gateway_json_to_xml() * 函数描述: tds:SetNetworkDefaultGateway请求的应答报文构造函数 * 输 入: soap -- soap结构体 * json_rsp -- 应答的json数据 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_gateway_json_to_xml(SOAP_CONTEXT *soap, JSON_OBJ *json_rsp) { if (soap == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetNetworkDefaultGateway rsp."); return soap_generate_xml((p_out_fun)(soap_out_tds_set_gateway_rsp), soap, NULL); } /****************************************************************************** * 函数名称: tds_set_gateway_xml_to_json() * 函数描述: tds:SetNetworkDefaultGateway请求的处理函数 * 输 入: soap -- soap结构体 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_gateway_xml_to_json(SOAP_CONTEXT *soap, JSON_OBJ **json_req) { JSON_OBJ *json_obj = NULL; JSON_OBJ *json_sec = NULL; JSON_OBJ *json_opt = NULL; S32 request_len = 0; S32 ch = 0; char *xml_start = NULL; char *xml_str = NULL; char **p = NULL; char charbuf[LEN_INFO * 2] = {0}; char temp_gateway[STR_IP_LEN] = {0}; char ip_addr[STR_IP_LEN] = {0}; LINK_STATUS link_status = {0}; #ifdef AUTO_GW_SUPPORT GATEWAY_MODE_CFG gateway_mode = {0}; WAN_CONN_INFO ewan_dhcp_ip = {0}; U32 link_ipaddr = 0; #endif if (soap == NULL || json_req == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetNetworkDefaultGateway parse."); /* 需要鉴权 */ if (OK != soap_usernametoken_auth(soap, UM_OPERATOR)) { ONVIF_TRACE("Auth failed\n"); soap_fault(soap, "SOAP-ENV:Sender", "ter:NotAuthorized", NULL, "Authority failure"); soap->error = 400; return ERROR; } /* 分析SetNetworkDefaultGateway请求的具体内容 */ if (soap->request_begin != NULL && soap->request_end != NULL) { request_len = soap->request_end - soap->request_begin; if (request_len < 0) { ONVIF_TRACE("request_len < 0."); goto error_parse; } xml_str = xml_start = soap->request_begin; p = (char **)&xml_str; } else { ONVIF_ERROR("soap request content is NULL."); return ERROR; } while (((*p) - xml_start) < request_len) { if ((ch = soap_get_tag(xml_start, request_len, p, charbuf, sizeof(charbuf))) == EOF) { goto error_parse; } if (charbuf[0] == '/') { continue; } if (TRUE == soap_match_tag(charbuf, "tt:IPv4Address")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } snprintf(temp_gateway, STR_IP_LEN, "%s", charbuf); } } if (0 == ds_read(LINK_STATUS_PATH, &link_status, sizeof(LINK_STATUS))) { ONVIF_ERROR("ds read %s error", LINK_STATUS_PATH); goto error_parse; } #ifdef AUTO_GW_SUPPORT if (0 == ds_read(GATEWAY_MODE_CFG_PATH, (U8*)&gateway_mode, sizeof(GATEWAY_MODE_CFG))) { ONVIF_ERROR("ds read %s error", GATEWAY_MODE_CFG_PATH); goto error_parse; } if (0 == ds_read(EWAN_DHCP_IP_PATH, &ewan_dhcp_ip, sizeof(WAN_CONN_INFO))) { ONVIF_ERROR("ds read %s error", EWAN_DHCP_IP_PATH); goto error_parse; } if (GW_MODE_AUTO_ADAPTIVE == gateway_mode.gateway_mode) { link_ipaddr = ewan_dhcp_ip.ipaddr; } else if (GW_MODE_ETH_PRIOR == gateway_mode.gateway_mode) { link_ipaddr = link_status.ipaddr; } #endif /* 组织json object */ json_obj = jso_new_obj(); json_sec = jso_new_obj(); json_opt = jso_new_obj(); if (json_obj == NULL || json_sec == NULL || json_opt == NULL) { ONVIF_TRACE("jso_new_obj error."); jso_free_obj(json_obj); jso_free_obj(json_sec); jso_free_obj(json_opt); goto error_parse; } jso_add_string(json_obj, "method", "set"); jso_obj_add(json_obj, "protocol", json_sec); jso_obj_add(json_sec, "wan", json_opt); jso_add_string(json_opt, "wan_type", "static"); jso_add_string(json_opt, "proto", "static"); json_opt = jso_new_obj(); jso_obj_add(json_sec, "static", json_opt); jso_add_string(json_opt, "gateway", temp_gateway); /* 若当前为dhcp,则将当前ip地址与静态ip地址同步,以保证设置前后ip地址保持不变 */ if (PROTO_DHCP == link_status.proto) { #ifdef AUTO_GW_SUPPORT soap_ipv4_ntop(ntohl(link_ipaddr), ip_addr, STR_IP_LEN); #else soap_ipv4_ntop(ntohl(link_status.ipaddr), ip_addr, STR_IP_LEN); #endif jso_add_string(json_opt, "ipaddr", ip_addr); } *json_req = json_obj; return OK; error_parse: return ERROR; } /****************************************************************************** * 函数名称: soap_out_tds_set_network_interfaces_rsp() * 函数描述: 组装tds:SetNetworkInterfaces element内容 * 输 入: xml_buf -- 存放输出xml字串的内存地址 * data -- 为空 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 soap_out_tds_set_network_interfaces_rsp(ONVIF_BUF *xml_buf, void *data) { /* tds:SetNetworkInterfacesResponse */ if (xml_buf == NULL) { ONVIF_TRACE("xml_buf == NULL."); return ERROR; } /* tds:SetNetworkInterfacesResponse begin */ SOAP_IF_FAIL_RET(soap_element_begin_out(xml_buf, "tds:SetNetworkInterfacesResponse", NULL)); /* tds:RebootNeeded */ SOAP_IF_FAIL_RET(soap_element_bool_type(xml_buf, "tds:RebootNeeded", FALSE, NULL)); /* tds:SetNetworkInterfacesResponse end */ SOAP_IF_FAIL_RET(soap_element_end_out(xml_buf, "tds:SetNetworkInterfacesResponse")); return OK; } /****************************************************************************** * 函数名称: tds_set_network_interfaces_json_to_xml() * 函数描述: tds:SetNetworkInterfaces请求的应答报文构造函数 * 输 入: soap -- soap结构体 * json_rsp -- 应答的json数据 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_network_interfaces_json_to_xml(SOAP_CONTEXT *soap, JSON_OBJ *json_rsp) { if (soap == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetNetworkInterfaces rsp."); return soap_generate_xml((p_out_fun)(soap_out_tds_set_network_interfaces_rsp), soap, NULL); } /****************************************************************************** * 函数名称: tds_set_network_interfaces_xml_to_json() * 函数描述: tds:SetNetworkInterfaces请求的处理函数 * 输 入: soap -- soap结构体 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_network_interfaces_xml_to_json(SOAP_CONTEXT *soap, JSON_OBJ **json_req) { JSON_OBJ *json_obj = NULL; JSON_OBJ *json_sec = NULL; JSON_OBJ *json_opt = NULL; S32 request_len = 0; S32 ch = 0; char *xml_start = NULL; char *xml_str = NULL; char **p = NULL; char charbuf[LEN_INFO * 2] = {0}; char temp_ip[STR_IP_LEN] = {0}; BOOL DHCP_flag = FALSE; if (soap == NULL || json_req == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetNetworkInterfaces parse."); /* 需要鉴权 */ if (OK != soap_usernametoken_auth(soap, UM_OPERATOR)) { ONVIF_TRACE("Auth failed\n"); soap_fault(soap, "SOAP-ENV:Sender", "ter:NotAuthorized", NULL, "Authority failure"); soap->error = 400; return ERROR; } /* 分析SetNetworkInterfaces请求的具体内容 */ if (soap->request_begin != NULL && soap->request_end != NULL) { request_len = soap->request_end - soap->request_begin; if (request_len < 0) { ONVIF_TRACE("request_len < 0."); goto error_parse; } xml_str = xml_start = soap->request_begin; p = (char **)&xml_str; } else { ONVIF_ERROR("soap request content is NULL."); return ERROR; } while (((*p) - xml_start) < request_len) { if ((ch = soap_get_tag(xml_start, request_len, p, charbuf, sizeof(charbuf))) == EOF) { goto error_parse; } if (charbuf[0] == '/') { continue; } if (TRUE == soap_match_tag(charbuf, "DHCP")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } if (0 == strcasecmp(charbuf, "True")) { DHCP_flag = TRUE; } } if (TRUE == soap_match_tag(charbuf, "Address")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } snprintf(temp_ip, STR_IP_LEN, "%s", charbuf); } } /* 组织json object */ json_obj = jso_new_obj(); json_sec = jso_new_obj(); json_opt = jso_new_obj(); if (json_obj == NULL || json_sec == NULL || json_opt == NULL) { ONVIF_TRACE("jso_new_obj error."); jso_free_obj(json_obj); jso_free_obj(json_sec); jso_free_obj(json_opt); goto error_parse; } jso_add_string(json_obj, "method", "set"); jso_obj_add(json_obj, "protocol", json_sec); jso_obj_add(json_sec, "wan", json_opt); if (TRUE == DHCP_flag) { jso_add_string(json_opt, "wan_type", "dhcp"); jso_add_string(json_opt, "proto", "dhcp"); } else { jso_add_string(json_opt, "wan_type", "static"); jso_add_string(json_opt, "proto", "static"); json_opt = jso_new_obj(); jso_obj_add(json_sec, "static", json_opt); jso_add_string(json_opt, "ipaddr", temp_ip); } *json_req = json_obj; return OK; error_parse: return ERROR; } /****************************************************************************** * 函数名称: soap_out_tds_set_network_protocols_rsp() * 函数描述: 组装tds:SetNetworkProtocols element内容 * 输 入: xml_buf -- 存放输出xml字串的内存地址 * data -- 为空 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 soap_out_tds_set_network_protocols_rsp(ONVIF_BUF *xml_buf, void *data) { /* tds:SetNetworkProtocolsResponse */ if (xml_buf == NULL) { ONVIF_TRACE("xml_buf == NULL."); return ERROR; } /* tds:SetNetworkProtocolsResponse begin */ SOAP_IF_FAIL_RET(soap_element_begin_out(xml_buf, "tds:SetNetworkProtocolsResponse", NULL)); /* tds:SetNetworkProtocolsResponse end */ SOAP_IF_FAIL_RET(soap_element_end_out(xml_buf, "tds:SetNetworkProtocolsResponse")); return OK; } /****************************************************************************** * 函数名称: tds_set_network_protocols_json_to_xml() * 函数描述: tds:SetNetworkProtocols请求的应答报文构造函数 * 输 入: soap -- soap结构体 * json_rsp -- 应答的json数据 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_network_protocols_json_to_xml(SOAP_CONTEXT *soap, JSON_OBJ *json_rsp) { if (soap == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetNetworkProtocols rsp."); return soap_generate_xml((p_out_fun)(soap_out_tds_set_network_protocols_rsp), soap, NULL); } /****************************************************************************** * 函数名称: tds_set_network_protocols_xml_to_json() * 函数描述: tds:SetNetworkProtocols请求的处理函数 * 输 入: soap -- soap结构体 * 输 出: N/A * 返 回 值: ERROR/OK ******************************************************************************/ LOCAL S32 tds_set_network_protocols_xml_to_json(SOAP_CONTEXT *soap, JSON_OBJ **json_req) { JSON_OBJ *json_obj = NULL; JSON_OBJ *json_sec = NULL; JSON_OBJ *json_opt = NULL; S32 request_len = 0; S32 ch = 0; char *xml_start = NULL; char *xml_str = NULL; char **p = NULL; char charbuf[LEN_INFO * 2] = {0}; int i = 0; JSON_OBJ *json_tmp_obj = NULL; char json_cmd_str[LEN_INFO] = {0}; struct _network_protocol{ const char *proto_type_name; /* 协议名称 */ SWITCH enabled; /* 当前协议是否需要设置 */ int port; /* 端口号 */ const char *module; /* 该协议所属模块 */ const char *fromat_str; /* 用于设置字符串,里面需要添加端口信息 */ }; int cur_proto_num = -1; /* 记录当前设置的proto序号,表示的是network_protocol的下标 */ struct _network_protocol network_protocol[] ={ {.proto_type_name = "HTTP", .module = "uhttpd", .fromat_str = "{\"main\":{\"listen_http\":\"%d\"}}"}, {.proto_type_name = "RTSP", .module = "cet",.fromat_str = "{\"rtsp\":{\"port\":\"%d\"}}"}, }; if (soap == NULL || json_req == NULL) { ONVIF_TRACE("soap == NULL."); return ERROR; } ONVIF_TRACE("tds:SetNetworkInterfaces parse."); /* 需要鉴权 */ if (OK != soap_usernametoken_auth(soap, UM_OPERATOR)) { ONVIF_TRACE("Auth failed\n"); soap_fault(soap, "SOAP-ENV:Sender", "ter:NotAuthorized", NULL, "Authority failure"); soap->error = 400; return ERROR; } /* 分析SetNetworkInterfaces请求的具体内容 */ if (soap->request_begin != NULL && soap->request_end != NULL) { request_len = soap->request_end - soap->request_begin; if (request_len < 0) { ONVIF_TRACE("request_len < 0."); goto error_parse; } xml_str = xml_start = soap->request_begin; p = (char **)&xml_str; } else { ONVIF_ERROR("soap request content is NULL."); return ERROR; } while (((*p) - xml_start) < request_len) { if ((ch = soap_get_tag(xml_start, request_len, p, charbuf, sizeof(charbuf))) == EOF) { goto error_parse; } if (charbuf[0] == '/') { continue; } /* 每一个NetworkProtocols的tag出现时,就说明来了一个新的协议 */ if (TRUE == soap_match_tag(charbuf, "NetworkProtocols")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } cur_proto_num = -1; } /* 根据Name来判断当前设置的协议 */ if (TRUE == soap_match_tag(charbuf, "Name")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } /* 上一个协议还未结束 */ if (-1 != cur_proto_num) { ONVIF_WARN("%s comes,but former proto is not end.", charbuf); continue; } for (i = 0; i < ARRAY_LEN(network_protocol); ++i) { if (0 == strcmp(network_protocol[i].proto_type_name, charbuf)) { network_protocol[i].enabled = TRUE; cur_proto_num = i; } } if (-1 == cur_proto_num) { ONVIF_WARN("Unsupport protocols = %s.", charbuf); soap_fault(soap, "SOAP-ENV:Sender", "ter:InvalidArgVal", "ter:ServiceNotSupported", "NVT does not support the service"); soap->error = SOAP_FAULT; goto error_parse; } } if (TRUE == soap_match_tag(charbuf, "Enabled")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } if (-1 == cur_proto_num) { ONVIF_WARN("Not get a proto name."); continue; } if (0 != strcasecmp("true", charbuf)) { ONVIF_WARN("Protoclo %s is disabled.", network_protocol[cur_proto_num].proto_type_name); network_protocol[cur_proto_num].enabled = FALSE; } } if (TRUE == soap_match_tag(charbuf, "Port")) { if (OK != soap_parse_element_value(xml_start, request_len, p, ch, charbuf, sizeof(charbuf))) { goto error_parse; } if (-1 == cur_proto_num) { ONVIF_WARN("Not get a proto name."); continue; } if (0 >= (network_protocol[cur_proto_num].port = atoi(charbuf))) { ONVIF_WARN("Get port of protoclo %s fail, port = %s.", network_protocol[cur_proto_num].proto_type_name, charbuf); network_protocol[cur_proto_num].enabled = FALSE; } } } /* 组织json object */ json_obj = jso_new_obj(); json_sec = jso_new_obj(); json_opt = jso_new_obj(); if (json_obj == NULL || json_sec == NULL || json_opt == NULL) { ONVIF_ERROR("jso_new_obj error."); goto error_parse; } jso_add_string(json_obj, "method", "set"); for (i = 0; i < ARRAY_LEN(network_protocol); ++i) { if (TRUE == network_protocol[i].enabled && 0 < network_protocol[i].port && NULL != network_protocol[i].module && NULL != network_protocol[i].fromat_str) { snprintf(json_cmd_str, LEN_INFO, network_protocol[i].fromat_str, network_protocol[i].port); json_tmp_obj = jso_from_string(json_cmd_str); if (NULL == json_tmp_obj) { continue; } jso_obj_add(json_obj, network_protocol[i].module, json_tmp_obj); ONVIF_DEBUG("Set %s port = %d", network_protocol[i].proto_type_name, network_protocol[i].port); } } jso_obj_add(json_obj, "rtsp", json_sec); jso_obj_add(json_sec, "main", json_opt); jso_add_string(json_opt, "enabled", network_protocol[1].enabled ? "on" : "off"); *json_req = json_obj; return OK; error_parse: jso_free_obj(json_opt); jso_free_obj(json_sec); jso_free_obj(json_obj); return ERROR; } /********************************************************************************* * Soap tds Handles init *********************************************************************************/ void tds_passthrough_init() { onvif_passthrough_handle_add("tds:SetSystemDateAndTime", tds_set_sys_time_xml_to_json, tds_set_sys_time_json_to_xml); onvif_passthrough_handle_add("tds:SetSystemFactoryDefault", tds_set_sys_factory_default_xml_to_json, tds_set_sys_factory_default_json_to_xml); onvif_passthrough_handle_add("tds:SystemReboot", tds_sys_reboot_xml_to_json, tds_sys_reboot_json_to_xml); onvif_passthrough_handle_add("tds:SetDNS", tds_set_dns_xml_to_json, tds_set_dns_json_to_xml); onvif_passthrough_handle_add("tds:SetNTP", tds_set_ntp_xml_to_json, tds_set_ntp_json_to_xml); onvif_passthrough_handle_add("tds:SetHostname", tds_set_hostname_xml_to_json, tds_set_hostname_json_to_xml); onvif_passthrough_handle_add("tds:SetNetworkDefaultGateway", tds_set_gateway_xml_to_json, tds_set_gateway_json_to_xml); onvif_passthrough_handle_add("tds:SetNetworkInterfaces", tds_set_network_interfaces_xml_to_json, tds_set_network_interfaces_json_to_xml); onvif_passthrough_handle_add("tds:SetNetworkProtocols", tds_set_network_protocols_xml_to_json, tds_set_network_protocols_json_to_xml); } _设备管理模块通过tds_passthrough.c实现系统时间设置功能,在解析UTC时间戳后优先检查NTP服务状态锁以防止配置冲突,随后通过SPI总线向RTC芯片写入校准值并同步触发时区配置文件更新。固件升级过程采用双重安全保障机制,包括数字签名验证和数据块CRC32校验,升级包被拆分写入独立Flash分区,看门狗线程以200ms间隔监控刷写进度,并在检测到断电时自动回滚至出厂备份区。整体模块设计确保设备配置的可靠性与安全性。_重新写,分三点,参照以下格式:“onvif_srv.c模块的核心功能可分为三个层面: 1. **服务初始化与监听**:通过`onvif_srv_start()`创建主服务端口监听,设置TCP缓冲区优化网络吞吐,并注册端口检查、数据处理和响应生成三个核心回调函数,其中关键操作包括绑定SOAP上下文到具体端口。 2. **请求处理中枢**:在`onvif_proc_data_srv()`中实现报文有效性校验(HTTP200状态和有效内容长度),根据端口号动态选择主服务或订阅服务的SOAP上下文,通过`soap_xml_parse()`深度解析XML请求体内容,最终由`soap_serve_request()`将请求分派至具体业务模块(如设备管理的soap_tds.c)。 3. **响应与资源管理**:根据处理结果选择响应通道(成功时调用SOAP响应生成器,错误时返回HTTP状态码),通过`http_reset_context()`强制释放请求内存,并提供`onvif_srv_remove_socket()`和`onvif_srv_stop()`实现动态服务维护与资源回收机制。”
09-02
D:\Java\jdk-1.8\bin\java.exe -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\Maven\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=65505:D:\Maven\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath D:\Java\jdk-1.8\jre\lib\charsets.jar;D:\Java\jdk-1.8\jre\lib\deploy.jar;D:\Java\jdk-1.8\jre\lib\ext\access-bridge-64.jar;D:\Java\jdk-1.8\jre\lib\ext\cldrdata.jar;D:\Java\jdk-1.8\jre\lib\ext\dnsns.jar;D:\Java\jdk-1.8\jre\lib\ext\jaccess.jar;D:\Java\jdk-1.8\jre\lib\ext\jfxrt.jar;D:\Java\jdk-1.8\jre\lib\ext\localedata.jar;D:\Java\jdk-1.8\jre\lib\ext\nashorn.jar;D:\Java\jdk-1.8\jre\lib\ext\sunec.jar;D:\Java\jdk-1.8\jre\lib\ext\sunjce_provider.jar;D:\Java\jdk-1.8\jre\lib\ext\sunmscapi.jar;D:\Java\jdk-1.8\jre\lib\ext\sunpkcs11.jar;D:\Java\jdk-1.8\jre\lib\ext\zipfs.jar;D:\Java\jdk-1.8\jre\lib\javaws.jar;D:\Java\jdk-1.8\jre\lib\jce.jar;D:\Java\jdk-1.8\jre\lib\jfr.jar;D:\Java\jdk-1.8\jre\lib\jfxswt.jar;D:\Java\jdk-1.8\jre\lib\jsse.jar;D:\Java\jdk-1.8\jre\lib\management-agent.jar;D:\Java\jdk-1.8\jre\lib\plugin.jar;D:\Java\jdk-1.8\jre\lib\resources.jar;D:\Java\jdk-1.8\jre\lib\rt.jar;D:\Maven\ideaProject\Hive\ifs-hive-application\target\classes;D:\Maven\ideaProject\Hive\ifs-hive\target\classes;D:\Maven\repository\org\springframework\boot\spring-boot-starter-mail\2.7.18\spring-boot-starter-mail-2.7.18.jar;D:\Maven\repository\org\springframework\spring-context-support\5.3.31\spring-context-support-5.3.31.jar;D:\Maven\repository\com\sun\mail\jakarta.mail\1.6.7\jakarta.mail-1.6.7.jar;D:\Maven\repository\com\sun\activation\jakarta.activation\1.2.2\jakarta.activation-1.2.2.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-amqp\2.7.18\spring-boot-starter-amqp-2.7.18.jar;D:\Maven\repository\org\springframework\spring-messaging\5.3.31\spring-messaging-5.3.31.jar;D:\Maven\repository\org\springframework\amqp\spring-rabbit\2.4.17\spring-rabbit-2.4.17.jar;D:\Maven\repository\org\springframework\amqp\spring-amqp\2.4.17\spring-amqp-2.4.17.jar;D:\Maven\repository\org\springframework\retry\spring-retry\1.3.4\spring-retry-1.3.4.jar;D:\Maven\repository\com\rabbitmq\amqp-client\5.14.3\amqp-client-5.14.3.jar;D:\Maven\repository\org\springframework\spring-tx\5.3.31\spring-tx-5.3.31.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.7.18\spring-boot-starter-data-jpa-2.7.18.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-aop\2.7.18\spring-boot-starter-aop-2.7.18.jar;D:\Maven\repository\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar;D:\Maven\repository\jakarta\transaction\jakarta.transaction-api\1.3.3\jakarta.transaction-api-1.3.3.jar;D:\Maven\repository\jakarta\persistence\jakarta.persistence-api\2.2.3\jakarta.persistence-api-2.2.3.jar;D:\Maven\repository\org\hibernate\hibernate-core\5.6.15.Final\hibernate-core-5.6.15.Final.jar;D:\Maven\repository\org\jboss\logging\jboss-logging\3.4.3.Final\jboss-logging-3.4.3.Final.jar;D:\Maven\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;D:\Maven\repository\org\jboss\jandex\2.4.2.Final\jandex-2.4.2.Final.jar;D:\Maven\repository\org\hibernate\common\hibernate-commons-annotations\5.1.2.Final\hibernate-commons-annotations-5.1.2.Final.jar;D:\Maven\repository\org\glassfish\jaxb\jaxb-runtime\2.3.9\jaxb-runtime-2.3.9.jar;D:\Maven\repository\org\glassfish\jaxb\txw2\2.3.9\txw2-2.3.9.jar;D:\Maven\repository\com\sun\istack\istack-commons-runtime\3.0.12\istack-commons-runtime-3.0.12.jar;D:\Maven\repository\org\springframework\data\spring-data-jpa\2.7.18\spring-data-jpa-2.7.18.jar;D:\Maven\repository\org\springframework\data\spring-data-commons\2.7.18\spring-data-commons-2.7.18.jar;D:\Maven\repository\org\springframework\spring-orm\5.3.31\spring-orm-5.3.31.jar;D:\Maven\repository\org\springframework\spring-aspects\5.3.31\spring-aspects-5.3.31.jar;D:\Maven\repository\com\alibaba\druid-spring-boot-starter\1.2.6\druid-spring-boot-starter-1.2.6.jar;D:\Maven\repository\com\alibaba\druid\1.2.6\druid-1.2.6.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-data-redis\2.7.18\spring-boot-starter-data-redis-2.7.18.jar;D:\Maven\repository\org\springframework\data\spring-data-redis\2.7.18\spring-data-redis-2.7.18.jar;D:\Maven\repository\org\springframework\data\spring-data-keyvalue\2.7.18\spring-data-keyvalue-2.7.18.jar;D:\Maven\repository\org\springframework\spring-oxm\5.3.31\spring-oxm-5.3.31.jar;D:\Maven\repository\io\lettuce\lettuce-core\6.1.10.RELEASE\lettuce-core-6.1.10.RELEASE.jar;D:\Maven\repository\io\netty\netty-common\4.1.101.Final\netty-common-4.1.101.Final.jar;D:\Maven\repository\io\netty\netty-handler\4.1.101.Final\netty-handler-4.1.101.Final.jar;D:\Maven\repository\io\netty\netty-resolver\4.1.101.Final\netty-resolver-4.1.101.Final.jar;D:\Maven\repository\io\netty\netty-buffer\4.1.101.Final\netty-buffer-4.1.101.Final.jar;D:\Maven\repository\io\netty\netty-transport-native-unix-common\4.1.101.Final\netty-transport-native-unix-common-4.1.101.Final.jar;D:\Maven\repository\io\netty\netty-codec\4.1.101.Final\netty-codec-4.1.101.Final.jar;D:\Maven\repository\io\netty\netty-transport\4.1.101.Final\netty-transport-4.1.101.Final.jar;D:\Maven\repository\io\projectreactor\reactor-core\3.4.34\reactor-core-3.4.34.jar;D:\Maven\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;D:\Maven\repository\com\kingee\sso\kingee-sso\1\kingee-sso-1.jar;D:\Maven\repository\com\bip\bip-api\1.0\bip-api-1.0.jar;D:\Maven\repository\com\kingdell\hr\kingdell-hr\1\kingdell-hr-1.jar;D:\Maven\repository\cn\afterturn\easypoi-annotation\4.1.0\easypoi-annotation-4.1.0.jar;D:\Maven\repository\cn\afterturn\easypoi-base\4.1.0\easypoi-base-4.1.0.jar;D:\Maven\repository\ognl\ognl\3.2.6\ognl-3.2.6.jar;D:\Maven\repository\org\javassist\javassist\3.20.0-GA\javassist-3.20.0-GA.jar;D:\Maven\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;D:\Maven\repository\com\google\code\gson\gson\2.9.1\gson-2.9.1.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-jdbc\2.7.18\spring-boot-starter-jdbc-2.7.18.jar;D:\Maven\repository\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;D:\Maven\repository\org\springframework\spring-jdbc\5.3.31\spring-jdbc-5.3.31.jar;D:\Maven\repository\com\jcraft\jsch\0.1.55\jsch-0.1.55.jar;D:\Maven\repository\com\hy\base\hy-common\9.0-SNAPSHOT\hy-common-9.0-20250903.082902-9.jar;D:\Maven\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;D:\Maven\repository\io\swagger\swagger-annotations\1.5.22\swagger-annotations-1.5.22.jar;D:\Maven\repository\io\swagger\swagger-models\1.5.22\swagger-models-1.5.22.jar;D:\Maven\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.5\jackson-annotations-2.13.5.jar;D:\Maven\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;D:\Maven\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;D:\Maven\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;D:\Maven\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;D:\Maven\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;D:\Maven\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;D:\Maven\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;D:\Maven\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;D:\Maven\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;D:\Maven\repository\com\mysql\mysql-connector-j\8.0.33\mysql-connector-j-8.0.33.jar;D:\Maven\repository\org\springframework\boot\spring-boot-actuator\2.7.18\spring-boot-actuator-2.7.18.jar;D:\Maven\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.7.18\spring-boot-actuator-autoconfigure-2.7.18.jar;D:\Maven\repository\com\fasterxml\jackson\core\jackson-databind\2.13.5\jackson-databind-2.13.5.jar;D:\Maven\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.5\jackson-datatype-jsr310-2.13.5.jar;D:\Maven\repository\org\apache\poi\poi\4.0.0\poi-4.0.0.jar;D:\Maven\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;D:\Maven\repository\org\apache\commons\commons-collections4\4.4\commons-collections4-4.4.jar;D:\Maven\repository\org\apache\poi\poi-scratchpad\4.0.0\poi-scratchpad-4.0.0.jar;D:\Maven\repository\com\monitorjbl\xlsx-streamer\2.1.0\xlsx-streamer-2.1.0.jar;D:\Maven\repository\org\apache\poi\poi-ooxml-schemas\4.0.0\poi-ooxml-schemas-4.0.0.jar;D:\Maven\repository\org\apache\xmlbeans\xmlbeans\3.0.1\xmlbeans-3.0.1.jar;D:\Maven\repository\com\rackspace\apache\xerces2-xsd11\2.11.1\xerces2-xsd11-2.11.1.jar;D:\Maven\repository\com\rackspace\eclipse\webtools\sourceediting\org.eclipse.wst.xml.xpath2.processor\2.1.100\org.eclipse.wst.xml.xpath2.processor-2.1.100.jar;D:\Maven\repository\edu\princeton\cup\java-cup\10k\java-cup-10k.jar;D:\Maven\repository\com\ibm\icu\icu4j\4.6\icu4j-4.6.jar;D:\Maven\repository\xml-resolver\xml-resolver\1.2\xml-resolver-1.2.jar;D:\Maven\repository\xml-apis\xml-apis\1.4.01\xml-apis-1.4.01.jar;D:\Maven\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;D:\Maven\repository\org\apache\poi\poi-ooxml\4.0.0\poi-ooxml-4.0.0.jar;D:\Maven\repository\org\apache\commons\commons-compress\1.18\commons-compress-1.18.jar;D:\Maven\repository\com\github\virtuald\curvesapi\1.04\curvesapi-1.04.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-web\2.7.18\spring-boot-starter-web-2.7.18.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter\2.7.18\spring-boot-starter-2.7.18.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-logging\2.7.18\spring-boot-starter-logging-2.7.18.jar;D:\Maven\repository\ch\qos\logback\logback-classic\1.2.12\logback-classic-1.2.12.jar;D:\Maven\repository\ch\qos\logback\logback-core\1.2.12\logback-core-1.2.12.jar;D:\Maven\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;D:\Maven\repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;D:\Maven\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;D:\Maven\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\Maven\repository\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-json\2.7.18\spring-boot-starter-json-2.7.18.jar;D:\Maven\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.5\jackson-datatype-jdk8-2.13.5.jar;D:\Maven\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.5\jackson-module-parameter-names-2.13.5.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-tomcat\2.7.18\spring-boot-starter-tomcat-2.7.18.jar;D:\Maven\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.83\tomcat-embed-core-9.0.83.jar;D:\Maven\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.83\tomcat-embed-el-9.0.83.jar;D:\Maven\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.83\tomcat-embed-websocket-9.0.83.jar;D:\Maven\repository\org\springframework\spring-web\5.3.31\spring-web-5.3.31.jar;D:\Maven\repository\org\springframework\spring-beans\5.3.31\spring-beans-5.3.31.jar;D:\Maven\repository\org\springframework\spring-webmvc\5.3.31\spring-webmvc-5.3.31.jar;D:\Maven\repository\org\springframework\spring-aop\5.3.31\spring-aop-5.3.31.jar;D:\Maven\repository\org\springframework\spring-context\5.3.31\spring-context-5.3.31.jar;D:\Maven\repository\org\springframework\spring-expression\5.3.31\spring-expression-5.3.31.jar;D:\Maven\repository\org\springframework\cloud\spring-cloud-starter-bootstrap\3.1.1\spring-cloud-starter-bootstrap-3.1.1.jar;D:\Maven\repository\org\springframework\cloud\spring-cloud-starter\3.1.1\spring-cloud-starter-3.1.1.jar;D:\Maven\repository\org\springframework\security\spring-security-rsa\1.0.10.RELEASE\spring-security-rsa-1.0.10.RELEASE.jar;D:\Maven\repository\org\bouncycastle\bcpkix-jdk15on\1.68\bcpkix-jdk15on-1.68.jar;D:\Maven\repository\org\bouncycastle\bcprov-jdk15on\1.68\bcprov-jdk15on-1.68.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-actuator\2.7.18\spring-boot-starter-actuator-2.7.18.jar;D:\Maven\repository\io\micrometer\micrometer-core\1.9.17\micrometer-core-1.9.17.jar;D:\Maven\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;D:\Maven\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;D:\Maven\repository\com\google\guava\guava\20.0\guava-20.0.jar;D:\Maven\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-discovery\2021.0.1.0\spring-cloud-starter-alibaba-nacos-discovery-2021.0.1.0.jar;D:\Maven\repository\com\alibaba\cloud\spring-cloud-alibaba-commons\2021.0.1.0\spring-cloud-alibaba-commons-2021.0.1.0.jar;D:\Maven\repository\com\alibaba\nacos\nacos-client\1.4.2\nacos-client-1.4.2.jar;D:\Maven\repository\com\alibaba\nacos\nacos-common\1.4.2\nacos-common-1.4.2.jar;D:\Maven\repository\commons-io\commons-io\2.7\commons-io-2.7.jar;D:\Maven\repository\org\apache\httpcomponents\httpasyncclient\4.1.5\httpasyncclient-4.1.5.jar;D:\Maven\repository\org\apache\httpcomponents\httpcore-nio\4.4.16\httpcore-nio-4.4.16.jar;D:\Maven\repository\com\alibaba\nacos\nacos-api\1.4.2\nacos-api-1.4.2.jar;D:\Maven\repository\com\fasterxml\jackson\core\jackson-core\2.13.5\jackson-core-2.13.5.jar;D:\Maven\repository\io\prometheus\simpleclient\0.15.0\simpleclient-0.15.0.jar;D:\Maven\repository\io\prometheus\simpleclient_tracer_otel\0.15.0\simpleclient_tracer_otel-0.15.0.jar;D:\Maven\repository\io\prometheus\simpleclient_tracer_common\0.15.0\simpleclient_tracer_common-0.15.0.jar;D:\Maven\repository\io\prometheus\simpleclient_tracer_otel_agent\0.15.0\simpleclient_tracer_otel_agent-0.15.0.jar;D:\Maven\repository\com\alibaba\spring\spring-context-support\1.0.11\spring-context-support-1.0.11.jar;D:\Maven\repository\org\springframework\cloud\spring-cloud-commons\3.1.1\spring-cloud-commons-3.1.1.jar;D:\Maven\repository\org\springframework\security\spring-security-crypto\5.7.11\spring-security-crypto-5.7.11.jar;D:\Maven\repository\org\springframework\cloud\spring-cloud-context\3.1.1\spring-cloud-context-3.1.1.jar;D:\Maven\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-config\2021.0.1.0\spring-cloud-starter-alibaba-nacos-config-2021.0.1.0.jar;D:\Maven\repository\org\apache\commons\commons-pool2\2.11.1\commons-pool2-2.11.1.jar;D:\Maven\repository\org\apache\hive\hive-jdbc\2.1.1-cdh6.3.2\hive-jdbc-2.1.1-cdh6.3.2.jar;D:\Maven\repository\org\apache\hive\hive-service-rpc\2.1.1-cdh6.3.2\hive-service-rpc-2.1.1-cdh6.3.2.jar;D:\Maven\repository\org\apache\thrift\libthrift\0.9.3\libthrift-0.9.3.jar;D:\Maven\repository\org\apache\httpcomponents\httpcore\4.4.16\httpcore-4.4.16.jar;D:\Maven\repository\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;D:\Maven\repository\org\apache\hive\hive-common\2.1.1-cdh6.3.2\hive-common-2.1.1-cdh6.3.2.jar;D:\Maven\repository\org\apache\hive\hive-service\2.1.1-cdh6.3.2\hive-service-2.1.1-cdh6.3.2.jar;D:\Maven\repository\org\springframework\boot\spring-boot-devtools\2.7.18\spring-boot-devtools-2.7.18.jar;D:\Maven\repository\org\springframework\boot\spring-boot\2.7.18\spring-boot-2.7.18.jar;D:\Maven\repository\org\springframework\boot\spring-boot-autoconfigure\2.7.18\spring-boot-autoconfigure-2.7.18.jar;D:\Maven\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;D:\Maven\repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;D:\Maven\repository\net\bytebuddy\byte-buddy\1.12.23\byte-buddy-1.12.23.jar;D:\Maven\repository\org\springframework\spring-core\5.3.31\spring-core-5.3.31.jar;D:\Maven\repository\org\springframework\spring-jcl\5.3.31\spring-jcl-5.3.31.jar;D:\Maven\repository\com\alibaba\fastjson\1.2.83\fastjson-1.2.83.jar;D:\Maven\repository\com\belerweb\pinyin4j\2.5.1\pinyin4j-2.5.1.jar;D:\Maven\repository\org\apache\httpcomponents\httpclient\4.5.13\httpclient-4.5.13.jar;D:\Maven\repository\commons-beanutils\commons-beanutils\1.9.3\commons-beanutils-1.9.3.jar;D:\Maven\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;D:\Maven\repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;D:\Maven\repository\org\apache\commons\commons-lang3\3.9\commons-lang3-3.9.jar;D:\Maven\repository\org\projectlombok\lombok\1.18.30\lombok-1.18.30.jar;D:\Maven\repository\org\springframework\cloud\spring-cloud-starter-openfeign\3.1.1\spring-cloud-starter-openfeign-3.1.1.jar;D:\Maven\repository\org\springframework\cloud\spring-cloud-openfeign-core\3.1.1\spring-cloud-openfeign-core-3.1.1.jar;D:\Maven\repository\io\github\openfeign\form\feign-form-spring\3.8.0\feign-form-spring-3.8.0.jar;D:\Maven\repository\io\github\openfeign\form\feign-form\3.8.0\feign-form-3.8.0.jar;D:\Maven\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;D:\Maven\repository\io\github\openfeign\feign-core\11.8\feign-core-11.8.jar;D:\Maven\repository\io\github\openfeign\feign-slf4j\11.8\feign-slf4j-11.8.jar com.hy.ifs.hive.HiveApplication 10:19:23.076 [Thread-1] DEBUG org.springframework.boot.devtools.restart.classloader.RestartClassLoader - Created RestartClassLoader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@1aa4f78 2025-09-17 10:19:24.044 INFO 20988 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.18) 2025-09-17 10:19:27.957 WARN 20988 --- [ restartedMain] c.a.c.n.c.NacosPropertySourceBuilder : Ignore the empty nacos configuration and get it based on dataId[null.properties] & group[DEFAULT_GROUP] 2025-09-17 10:19:27.957 INFO 20988 --- [ restartedMain] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-null.properties,DEFAULT_GROUP'}] 2025-09-17 10:19:27.961 INFO 20988 --- [ restartedMain] com.hy.ifs.hive.HiveApplication : No active profile set, falling back to 1 default profile: "default" 2025-09-17 10:19:28.621 INFO 20988 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode 2025-09-17 10:19:28.621 INFO 20988 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2025-09-17 10:19:28.674 INFO 20988 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 46 ms. Found 3 JPA repository interfaces. 2025-09-17 10:19:28.682 INFO 20988 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode 2025-09-17 10:19:28.682 INFO 20988 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. 2025-09-17 10:19:28.692 INFO 20988 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.hy.ifs.hive.repositorites.CustomerRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository 2025-09-17 10:19:28.693 INFO 20988 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.hy.ifs.hive.repositorites.DirectionCodeRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository 2025-09-17 10:19:28.693 INFO 20988 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.hy.ifs.hive.repositorites.DirectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository 2025-09-17 10:19:28.693 INFO 20988 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 5 ms. Found 0 Redis repository interfaces. 2025-09-17 10:19:28.832 INFO 20988 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=3c4e86c4-1dd9-3a09-904c-7500e21d04b4 2025-09-17 10:19:29.311 INFO 20988 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2025-09-17 10:19:29.311 INFO 20988 --- [ restartedMain] o.a.catalina.core.AprLifecycleListener : Loaded Apache Tomcat Native library [1.3.1] using APR version [1.7.4]. 2025-09-17 10:19:29.311 INFO 20988 --- [ restartedMain] o.a.catalina.core.AprLifecycleListener : APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true]. 2025-09-17 10:19:29.311 INFO 20988 --- [ restartedMain] o.a.catalina.core.AprLifecycleListener : APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] 2025-09-17 10:19:29.315 INFO 20988 --- [ restartedMain] o.a.catalina.core.AprLifecycleListener : OpenSSL successfully initialized [OpenSSL 3.0.14 4 Jun 2024] 2025-09-17 10:19:29.322 INFO 20988 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2025-09-17 10:19:29.322 INFO 20988 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83] 2025-09-17 10:19:29.469 INFO 20988 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2025-09-17 10:19:29.469 INFO 20988 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1499 ms 2025-09-17 10:19:29.685 INFO 20988 --- [ restartedMain] org.apache.hive.jdbc.Utils : Supplied authorities: cdh50:10000 2025-09-17 10:19:29.686 INFO 20988 --- [ restartedMain] org.apache.hive.jdbc.Utils : Resolved authority: cdh50:10000 2025-09-17 10:19:30.268 ERROR 20988 --- [ restartedMain] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} init error java.lang.NoClassDefFoundError: org/apache/hadoop/hive/serde2/thrift/Type at org.apache.hive.service.cli.TypeDescriptor.<init>(TypeDescriptor.java:47) ~[hive-service-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.service.cli.ColumnDescriptor.<init>(ColumnDescriptor.java:46) ~[hive-service-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.service.cli.TableSchema.<init>(TableSchema.java:46) ~[hive-service-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.jdbc.HiveQueryResultSet.retrieveSchema(HiveQueryResultSet.java:263) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.jdbc.HiveQueryResultSet.<init>(HiveQueryResultSet.java:197) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.jdbc.HiveQueryResultSet$Builder.build(HiveQueryResultSet.java:178) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:269) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:473) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1434) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1733) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:919) [druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1393) [druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1389) [druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:100) [druid-1.2.6.jar:1.2.6] at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) [spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) [spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) [spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:332) [spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.boot.jdbc.EmbeddedDatabaseConnection.isEmbedded(EmbeddedDatabaseConnection.java:164) [spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateDefaultDdlAutoProvider.getDefaultDdlAuto(HibernateDefaultDdlAutoProvider.java:42) [spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.lambda$getVendorProperties$1(HibernateJpaConfiguration.java:130) [spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings.getDdlAuto(HibernateSettings.java:41) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineDdlAuto(HibernateProperties.java:143) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.getAdditionalProperties(HibernateProperties.java:103) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineHibernateProperties(HibernateProperties.java:95) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.getVendorProperties(HibernateJpaConfiguration.java:131) [spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.entityManagerFactory(JpaBaseConfiguration.java:132) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_431] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_431] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_431] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_431] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:633) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1168) ~[spring-context-5.3.31.jar:5.3.31] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:919) ~[spring-context-5.3.31.jar:5.3.31] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:591) ~[spring-context-5.3.31.jar:5.3.31] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289) ~[spring-boot-2.7.18.jar:2.7.18] at com.hy.ifs.hive.HiveApplication.main(HiveApplication.java:11) ~[classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_431] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_431] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_431] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_431] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-2.7.18.jar:2.7.18] Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.serde2.thrift.Type at java.net.URLClassLoader.findClass(URLClassLoader.java:387) ~[na:1.8.0_431] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_431] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:359) ~[na:1.8.0_431] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_431] ... 57 common frames omitted 2025-09-17 10:19:30.269 WARN 20988 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/hadoop/hive/serde2/thrift/Type 2025-09-17 10:19:30.270 INFO 20988 --- [ restartedMain] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closing ... 2025-09-17 10:19:30.270 INFO 20988 --- [ restartedMain] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closed 2025-09-17 10:19:30.272 INFO 20988 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2025-09-17 10:19:30.285 INFO 20988 --- [ restartedMain] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2025-09-17 10:19:30.309 ERROR 20988 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/hadoop/hive/serde2/thrift/Type at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:633) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1168) ~[spring-context-5.3.31.jar:5.3.31] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:919) ~[spring-context-5.3.31.jar:5.3.31] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:591) ~[spring-context-5.3.31.jar:5.3.31] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) [spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409) [spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) [spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) [spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289) [spring-boot-2.7.18.jar:2.7.18] at com.hy.ifs.hive.HiveApplication.main(HiveApplication.java:11) [classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_431] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_431] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_431] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_431] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) [spring-boot-devtools-2.7.18.jar:2.7.18] Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/hadoop/hive/serde2/thrift/Type at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648) ~[spring-beans-5.3.31.jar:5.3.31] ... 24 common frames omitted Caused by: java.lang.NoClassDefFoundError: org/apache/hadoop/hive/serde2/thrift/Type at org.apache.hive.service.cli.TypeDescriptor.<init>(TypeDescriptor.java:47) ~[hive-service-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.service.cli.ColumnDescriptor.<init>(ColumnDescriptor.java:46) ~[hive-service-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.service.cli.TableSchema.<init>(TableSchema.java:46) ~[hive-service-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.jdbc.HiveQueryResultSet.retrieveSchema(HiveQueryResultSet.java:263) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.jdbc.HiveQueryResultSet.<init>(HiveQueryResultSet.java:197) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.jdbc.HiveQueryResultSet$Builder.build(HiveQueryResultSet.java:178) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:269) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:473) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1434) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1733) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:919) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1393) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1389) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:100) ~[druid-1.2.6.jar:1.2.6] at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) ~[spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) ~[spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) ~[spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:332) ~[spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.boot.jdbc.EmbeddedDatabaseConnection.isEmbedded(EmbeddedDatabaseConnection.java:164) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateDefaultDdlAutoProvider.getDefaultDdlAuto(HibernateDefaultDdlAutoProvider.java:42) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.lambda$getVendorProperties$1(HibernateJpaConfiguration.java:130) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings.getDdlAuto(HibernateSettings.java:41) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineDdlAuto(HibernateProperties.java:143) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.getAdditionalProperties(HibernateProperties.java:103) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineHibernateProperties(HibernateProperties.java:95) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.getVendorProperties(HibernateJpaConfiguration.java:131) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.entityManagerFactory(JpaBaseConfiguration.java:132) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_431] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_431] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_431] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_431] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.31.jar:5.3.31] ... 25 common frames omitted Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.serde2.thrift.Type at java.net.URLClassLoader.findClass(URLClassLoader.java:387) ~[na:1.8.0_431] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_431] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:359) ~[na:1.8.0_431] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_431] ... 57 common frames omitted 2025-09-17 10:19:30.312 WARN 20988 --- [ Thread-6] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Start destroying common HttpClient 进程已结束,退出代码0
09-18
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值