This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch cn-site
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git


The following commit(s) were added to refs/heads/cn-site by this push:
     new 2c51dfe301 deploy: 1a29d24fff6afd08520a384c18720835a915421c
2c51dfe301 is described below

commit 2c51dfe30186f9b982bd1b4e451bf802506a215b
Author: AlbumenJ <[email protected]>
AuthorDate: Sun Jun 18 05:44:44 2023 +0000

    deploy: 1a29d24fff6afd08520a384c18720835a915421c
---
 sitemap.xml                                             |  2 +-
 .../advanced-features-and-usage/service/index.xml       | 17 +++++++++--------
 .../service/local-mock/index.html                       | 16 +++++++++-------
 zh-cn/sitemap.xml                                       |  2 +-
 4 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/sitemap.xml b/sitemap.xml
index 6e23f1022f..6785ab16b0 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><sitemapindex 
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9";><sitemap><loc>https://cn.dubbo.apache.org/zh-cn/sitemap.xml</loc><lastmod>2023-06-18T13:39:08+08:00</lastmod></sitemap><sitemap><loc>https://cn.dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-05-10T11:59:30+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><sitemapindex 
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9";><sitemap><loc>https://cn.dubbo.apache.org/zh-cn/sitemap.xml</loc><lastmod>2023-06-18T13:39:30+08:00</lastmod></sitemap><sitemap><loc>https://cn.dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-05-10T11:59:30+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
diff --git 
a/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/index.xml 
b/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/index.xml
index d251d5d198..9ccbb9973d 100644
--- 
a/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/index.xml
+++ 
b/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/index.xml
@@ -2249,7 +2249,9 @@ key 为服务名,value 为服务提供者 url,此配置优先级最高,&lt
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">});&lt;/span>
 
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Overview:
 
本地伪装</title><link>https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/</link><pubDate>Mon,
 01 Jan 0001 00:00:00 
+0000</pubDate><guid>https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/</guid><description>
 &lt;h2 id="特性说明">特性说明&lt;/h2>
-&lt;p>在 Dubbo3 中有一种机制可以实现轻量级的服务降级,也就是本地伪装 [^1]。&lt;/p>
+&lt;p>在 Dubbo3 中有一种机制可以实现轻量级的服务降级,也就是本地伪装。&lt;/p>
+&lt;p>Mock 是 Stub 的一个子集,便于服务提供方在客户端执行容错逻辑,因经常需要在出现 RpcException 
(比如网络失败,超时等)时进行容错,而在出现业务异常(比如登录用户名密码错误)时不需要容错,
+如果用 Stub,可能就需要捕获并依赖 RpcException 类,而用 Mock 就可以不依赖 RpcException,因为它的约定就是只有出现 
RpcException 时才执行。&lt;/p>
 &lt;h2 id="使用场景">使用场景&lt;/h2>
 &lt;p>本地伪装常被用于服务降级。比如某验权服务,当服务提供方全部挂掉后,假如此时服务消费方发起了一次远程调用,那么本次调用将会失败并抛出一个 
&lt;code>RpcException&lt;/code> 异常。&lt;/p>
 &lt;p>为了避免出现这种直接抛出异常的情况出现,那么客户端就可以利用本地伪装来提供 Mock 数据返回授权失败。&lt;/p>
@@ -2259,7 +2261,8 @@ key 为服务名,value 为服务提供者 url,此配置优先级最高,&lt
 &lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-xml" data-lang="xml">&lt;span 
style="display:flex;">&lt;span>&lt;span 
style="color:#268bd2">&amp;lt;dubbo:reference&lt;/span> interface=&lt;span 
style="color:#2aa198">&amp;#34;com.foo.BarService&amp;#34;&lt;/span> 
mock=&lt;span style="color:#2aa198">&amp;#34;true&amp;#34;&lt;/span> &lt;span 
style="color:#268bd2">/&amp;gt;&lt;/span>
 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或&lt;/p>
 &lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-xml" data-lang="xml">&lt;span 
style="display:flex;">&lt;span>&lt;span 
style="color:#268bd2">&amp;lt;dubbo:reference&lt;/span> interface=&lt;span 
style="color:#2aa198">&amp;#34;com.foo.BarService&amp;#34;&lt;/span> 
mock=&lt;span 
style="color:#2aa198">&amp;#34;com.foo.BarServiceMock&amp;#34;&lt;/span> 
&lt;span style="color:#268bd2" [...]
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在工程中提供 Mock 实现 
[^2]:&lt;/p>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在工程中提供 Mock 实现 [^2]:
+在 interface 旁放一个 Mock 实现,它实现 BarService 接口,并有一个无参构造函数。同时,如果没有在配置文件中显式指定 Mock 
类的时候,那么需要保证 Mock 类的全限定类名是 &lt;code>原全限定类名+Mock&lt;/code> 的形式,例如 
&lt;code>com.foo.BarServiceMock&lt;/code>,否则将会 Mock 失败。&lt;/p>
 &lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span>&lt;span style="color:#719e07">package&lt;/span> 
com.foo&lt;span style="color:#719e07">;&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#268bd2">public&lt;/span> &lt;span 
style="color:#268bd2">class&lt;/span> &lt;span 
style="color:#268bd2">BarServiceMock&lt;/span> &lt;span 
style="color:#268bd2">implements&lt;/span> BarService &lt;span 
style="color:#719e07">{&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#268bd2">public&lt;/span> String &lt;span 
style="color:#268bd2">sayHello&lt;/span>&lt;span 
style="color:#719e07">(&lt;/span>String name&lt;span 
style="color:#719e07">)&lt;/span> &lt;span style="color:#719e07">{&lt;/span>
@@ -2270,7 +2273,7 @@ key 为服务名,value 为服务提供者 url,此配置优先级最高,&lt
 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 
id="使用-return-关键字-mock-返回值">使用 return 关键字 Mock 返回值&lt;/h3>
 &lt;p>使用 &lt;code>return&lt;/code> 来返回一个字符串表示的对象,作为 Mock 的返回值。合法的字符串可以是:&lt;/p>
 &lt;ul>
-&lt;li>&lt;em>empty&lt;/em>:代表空,返回基本类型的默认值、集合类的空值、自定义实体类的空对象 [^3]&lt;/li>
+&lt;li>&lt;em>empty&lt;/em>:代表空,返回基本类型的默认值、集合类的空值、自定义实体类的空对象,如果返回值是一个实体类,那么此时返回的将会是一个属性都为默认值的空对象而不是
 &lt;code>null&lt;/code>。&lt;/li>
 &lt;li>&lt;em>null&lt;/em>:返回 &lt;code>null&lt;/code>&lt;/li>
 &lt;li>&lt;em>true&lt;/em>:返回 &lt;code>true&lt;/code>&lt;/li>
 &lt;li>&lt;em>false&lt;/em>:返回 &lt;code>false&lt;/code>&lt;/li>
@@ -2297,7 +2300,8 @@ key 为服务名,value 为服务提供者 url,此配置优先级最高,&lt
 &lt;p>当调用出错时,抛出一个默认的 RPCException:&lt;/p>
 &lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#268bd2">&amp;lt;dubbo:reference&lt;/span> interface=&lt;span 
style="color:#2aa198">&amp;#34;com.foo.BarService&amp;#34;&lt;/span> 
mock=&lt;span style="color:#2aa198">&amp;#34;throw&amp;#34;&lt;/span>&lt;span 
style="color:#268bd2">/&amp;gt;&lt;/span>
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>当调用出错时,抛出指定的 Exception 
[^4]:&lt;/p>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>当调用出错时,抛出指定的 
Exception:&lt;/p>
+&lt;p>自定义异常必须拥有一个入参为 &lt;code>String&lt;/code> 的构造函数,该构造函数将用于接受异常信息。&lt;/p>
 &lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#268bd2">&amp;lt;dubbo:reference&lt;/span> interface=&lt;span 
style="color:#2aa198">&amp;#34;com.foo.BarService&amp;#34;&lt;/span> 
mock=&lt;span style="color:#2aa198">&amp;#34;throw 
com.foo.MockException&amp;#34;&lt;/span>&lt;span 
style="color:#268bd2">/&amp;gt;&lt;/span>
 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 
id="使用-force-和-fail-关键字来配置-mock-的行为">使用 force 和 fail 关键字来配置 Mock 的行为&lt;/h3>
@@ -2329,10 +2333,7 @@ key 为服务名,value 为服务提供者 url,此配置优先级最高,&lt
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#268bd2">&amp;lt;dubbo:reference&lt;/span> id=&lt;span 
style="color:#2aa198">&amp;#34;demoService&amp;#34;&lt;/span> check=&lt;span 
style="color:#2aa198">&amp;#34;false&amp;#34;&lt;/span> interface=&lt;span 
style="color:#2aa198">&amp;#34;com.foo.BarService&amp;#34;&lt;/span>&lt;span 
style="color:#268bd2">&amp;gt;&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#268bd2">&amp;lt;dubbo:parameter&lt;/span> key=&lt;span 
style="color:#2aa198">&amp;#34;sayHello.mock&amp;#34;&lt;/span> value=&lt;span 
style="color:#2aa198">&amp;#34;force:return fake&amp;#34;&lt;/span>&lt;span 
style="color:#268bd2">/&amp;gt;&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#268bd2">&amp;lt;/dubbo:reference&amp;gt;&lt;/span>
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
-&lt;div class="alert alert-primary" role="alert">
-&lt;h4 class="alert-heading">注意事项&lt;/h4>
-&lt;/div></description></item><item><title>Overview: 
多注册中心</title><link>https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/multi-registry/</link><pubDate>Mon,
 01 Jan 0001 00:00:00 
+0000</pubDate><guid>https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/multi-registry/</guid><description>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Overview:
 
多注册中心</title><link>https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/multi-registry/</link><pubDate>Mon,
 01 Jan 0001 00:00:00 
+0000</pubDate><guid>https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/multi-registry/</guid><description>
 &lt;h2 id="特性说明">特性说明&lt;/h2>
 &lt;p>Dubbo 
支持同一服务向多注册中心同时注册,或者不同服务分别注册到不同的注册中心上去,甚至可以同时引用注册在不同注册中心上的同名服务。另外,注册中心是支持自定义扩展的 
&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" 
role="doc-noteref">1&lt;/a>&lt;/sup>。&lt;/p>
 &lt;h2 id="使用场景">使用场景&lt;/h2>
diff --git 
a/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/index.html
 
b/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/index.html
index 7fac8ad732..66ad064d8b 100644
--- 
a/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/index.html
+++ 
b/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS 
content="INDEX, FOLLOW"><link rel=canonical 
href=https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/><script>var
 _hmt=_hmt||[];(function(){var 
e,t=document.createElement("script");t.src="https://hm.baidu.com/hm.js?3b78f49ba47181e4d998a66b689446e9",e=document.getElementsByTagName("script")[0],e.parentNode.insertBefore(t,e)})()</script><meta
 charset=utf-8><meta name=v [...]
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS 
content="INDEX, FOLLOW"><link rel=canonical 
href=https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/><script>var
 _hmt=_hmt||[];(function(){var 
e,t=document.createElement("script");t.src="https://hm.baidu.com/hm.js?3b78f49ba47181e4d998a66b689446e9",e=document.getElementsByTagName("script")[0],e.parentNode.insertBefore(t,e)})()</script><meta
 charset=utf-8><meta name=v [...]
 <script>var 
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function 
gtag(){dataLayer.push(arguments)}gtag("js",new 
Date),gtag("config","G-NM6FFMT51J",{anonymize_ip:!1})}</script><link 
rel=preload 
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
 as=style><link 
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
 rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js 
integrity="sha256-9/a [...]
 <link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta 
name=theme-color content="#326ce5"><link rel=stylesheet 
href=/css/feature-states.css><meta name=description content="了解如何在 Dubbo 
中利用本地伪装实现服务降级"><meta property="og:description" content="了解如何在 Dubbo 
中利用本地伪装实现服务降级"><meta name=twitter:description content="了解如何在 Dubbo 
中利用本地伪装实现服务降级"><meta property="og:url" 
content="https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-
 [...]
 <link href=/css/community.css rel=stylesheet><link href=/css/contactus.css 
rel=stylesheet><link href=/css/language.css rel=stylesheet><script 
src=/js/script.js></script></head><body class="td-page 
td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand 
navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a 
class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span 
class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class=" 
[...]
@@ -670,16 +670,18 @@
 <label for=m-zh-cnoverviewreferenceprotocols-check><a 
href=/zh-cn/overview/reference/protocols/ class="align-left pl-0 
td-sidebar-link td-sidebar-link__section" 
id=m-zh-cnoverviewreferenceprotocols><span>协议规范</span></a></label><ul 
class="ul-3 foldable"><li class="td-sidebar-nav__section-title 
td-sidebar-nav__section without-child" 
id=m-zh-cnoverviewreferenceprotocolstriple-li><input type=checkbox 
id=m-zh-cnoverviewreferenceprotocolstriple-check>
 <label for=m-zh-cnoverviewreferenceprotocolstriple-check><a 
href=/zh-cn/overview/reference/protocols/triple/ title="Triple 协议设计理念与规范" 
class="align-left pl-0 td-sidebar-link td-sidebar-link__page" 
id=m-zh-cnoverviewreferenceprotocolstriple><span>Triple 
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title 
td-sidebar-nav__section without-child" 
id=m-zh-cnoverviewreferenceprotocolstcp-li><input type=checkbox 
id=m-zh-cnoverviewreferenceprotocolstcp-check>
 <label for=m-zh-cnoverviewreferenceprotocolstcp-check><a 
href=/zh-cn/overview/reference/protocols/tcp/ class="align-left pl-0 
td-sidebar-link td-sidebar-link__page" 
id=m-zh-cnoverviewreferenceprotocolstcp><span>Dubbo2 
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title 
td-sidebar-nav__section without-child" 
id=m-zh-cnoverviewreferenceprotocolshttp-li><input type=checkbox 
id=m-zh-cnoverviewreferenceprotocolshttp-check>
-<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a 
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0 
td-sidebar-link td-sidebar-link__page" 
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP 
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
 class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb 
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a 
href=https://cn.dubbo.apache.org/zh-c [...]
+<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a 
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0 
td-sidebar-link td-sidebar-link__page" 
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP 
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
 class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb 
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a 
href=https://cn.dubbo.apache.org/zh-c [...]
+如果用 Stub,可能就需要捕获并依赖 RpcException 类,而用 Mock 就可以不依赖 RpcException,因为它的约定就是只有出现 
RpcException 时才执行。</p><h2 
id=使用场景>使用场景</h2><p>本地伪装常被用于服务降级。比如某验权服务,当服务提供方全部挂掉后,假如此时服务消费方发起了一次远程调用,那么本次调用将会失败并抛出一个
 <code>RpcException</code> 异常。</p><p>为了避免出现这种直接抛出异常的情况出现,那么客户端就可以利用本地伪装来提供 Mock 
数据返回授权失败。</p><h2 id=使用方式>使用方式</h2><h3 id=开启-mock-配置>开启 Mock 配置</h3><p>在 Spring 
XML 配置文件中按以下方式配置:</p><div class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4>
 [...]
 </span></span></code></pre></div><p>或</p><div class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-xml data-lang=xml><span style=display:flex><span><span 
style=color:#268bd2>&lt;dubbo:reference</span> interface=<span 
style=color:#2aa198>&#34;com.foo.BarService&#34;</span> mock=<span 
style=color:#2aa198>&#34;com.foo.BarServiceMock&#34;</span> <span 
style=color:#268bd2>/&gt;</span>
-</span></span></code></pre></div><p>在工程中提供 Mock 实现 [^2]:</p><div 
class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-java data-lang=java><span style=display:flex><span><span 
style=color:#719e07>package</span> com.foo<span style=color:#719e07>;</span>
+</span></span></code></pre></div><p>在工程中提供 Mock 实现 [^2]:
+在 interface 旁放一个 Mock 实现,它实现 BarService 接口,并有一个无参构造函数。同时,如果没有在配置文件中显式指定 Mock 
类的时候,那么需要保证 Mock 类的全限定类名是 <code>原全限定类名+Mock</code> 的形式,例如 
<code>com.foo.BarServiceMock</code>,否则将会 Mock 失败。</p><div class=highlight><pre 
tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-java data-lang=java><span style=display:flex><span><span 
style=color:#719e07>package</span> com.foo<span style=color:#719e07>;</span>
 </span></span><span style=display:flex><span><span 
style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span 
style=color:#268bd2>BarServiceMock</span> <span 
style=color:#268bd2>implements</span> BarService <span 
style=color:#719e07>{</span>
 </span></span><span style=display:flex><span>    <span 
style=color:#268bd2>public</span> String <span 
style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String 
name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
 </span></span><span style=display:flex><span>        <span 
style=color:#586e75>// 你可以伪造容错数据,此方法只在出现RpcException时被执行
 </span></span></span><span style=display:flex><span><span 
style=color:#586e75></span>        <span style=color:#719e07>return</span> 
<span style=color:#2aa198>&#34;容错数据&#34;</span><span 
style=color:#719e07>;</span>
 </span></span><span style=display:flex><span>    <span 
style=color:#719e07>}</span>
 </span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div><h3 id=使用-return-关键字-mock-返回值>使用 return 关键字 
Mock 返回值</h3><p>使用 <code>return</code> 来返回一个字符串表示的对象,作为 Mock 
的返回值。合法的字符串可以是:</p><ul><li><em>empty</em>:代表空,返回基本类型的默认值、集合类的空值、自定义实体类的空对象 
[^3]</li><li><em>null</em>:返回 <code>null</code></li><li><em>true</em>:返回 
<code>true</code></li><li><em>false</em>:返回 <code>false</code></li><li><em>JSON 
字符串</em>:返回反序列化 JSON 串后所得到的对象</li></ul><p>举个例子,如果服务的消费方经常需要 try-catch 
捕获异常,如:</p><div class=highlight><pre tabindex=0 style=co [...]
+</span></span></code></pre></div><h3 id=使用-return-关键字-mock-返回值>使用 return 关键字 
Mock 返回值</h3><p>使用 <code>return</code> 来返回一个字符串表示的对象,作为 Mock 
的返回值。合法的字符串可以是:</p><ul><li><em>empty</em>:代表空,返回基本类型的默认值、集合类的空值、自定义实体类的空对象,如果返回值是一个实体类,那么此时返回的将会是一个属性都为默认值的空对象而不是
 <code>null</code>。</li><li><em>null</em>:返回 
<code>null</code></li><li><em>true</em>:返回 
<code>true</code></li><li><em>false</em>:返回 <code>false</code></li><li><em>JSON 
字符串</em>:返回反序列化 JSON 串后所得到的对象</li></ul><p>举个例子,如果服务的消费方经常需要 try-catch 捕获异 [...]
 </span></span><span style=display:flex><span>
 </span></span><span style=display:flex><span>    <span 
style=color:#268bd2>public</span> Offer <span 
style=color:#268bd2>findOffer</span><span style=color:#719e07>(</span>String 
offerId<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
 </span></span><span style=display:flex><span>        Offer offer <span 
style=color:#719e07>=</span> <span style=color:#cb4b16>null</span><span 
style=color:#719e07>;</span>
@@ -695,7 +697,7 @@
 </span></span></code></pre></div><p>那么请考虑改为 Mock 实现,并在 Mock 实现中 <code>return 
null</code>。如果只是想简单的忽略异常,在 <code>2.0.11</code> 以上版本可用:</p><div 
class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-xml data-lang=xml><span style=display:flex><span><span 
style=color:#268bd2>&lt;dubbo:reference</span> interface=<span 
style=color:#2aa198>&#34;com.foo.BarService&#34;</span> mock=<span 
style=color:#2aa198>&#34;ret [...]
 </span></span></code></pre></div><h3 id=使用-throw-关键字-mock-抛出异常>使用 throw 关键字 
Mock 抛出异常</h3><p>使用 <code>throw</code> 来返回一个 Exception 对象,作为 Mock 
的返回值。</p><p>当调用出错时,抛出一个默认的 RPCException:</p><div class=highlight><pre 
tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-xml data-lang=xml><span style=display:flex><span>
 </span></span><span style=display:flex><span><span 
style=color:#268bd2>&lt;dubbo:reference</span> interface=<span 
style=color:#2aa198>&#34;com.foo.BarService&#34;</span> mock=<span 
style=color:#2aa198>&#34;throw&#34;</span><span style=color:#268bd2>/&gt;</span>
-</span></span></code></pre></div><p>当调用出错时,抛出指定的 Exception [^4]:</p><div 
class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-xml data-lang=xml><span style=display:flex><span>
+</span></span></code></pre></div><p>当调用出错时,抛出指定的 
Exception:</p><p>自定义异常必须拥有一个入参为 <code>String</code> 
的构造函数,该构造函数将用于接受异常信息。</p><div class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-xml data-lang=xml><span style=display:flex><span>
 </span></span><span style=display:flex><span><span 
style=color:#268bd2>&lt;dubbo:reference</span> interface=<span 
style=color:#2aa198>&#34;com.foo.BarService&#34;</span> mock=<span 
style=color:#2aa198>&#34;throw com.foo.MockException&#34;</span><span 
style=color:#268bd2>/&gt;</span>
 </span></span></code></pre></div><h3 id=使用-force-和-fail-关键字来配置-mock-的行为>使用 
force 和 fail 关键字来配置 Mock 的行为</h3><p><code>force:</code> 代表强制使用 Mock 
行为,在这种情况下不会走远程调用。</p><p><code>fail:</code> 与默认行为一致,只有当远程调用发生错误时才使用 Mock 
行为。也就是说,配置的时候其实是可以不使用 <code>fail</code> 关键字的,直接使用 <code>throw</code> 或者 
<code>return</code> 就可以了。</p><p><code>force:</code> 和 <code>fail:</code> 都支持与 
<code>throw</code> 或者 <code>return</code> 组合使用。</p><p>强制返回指定值:</p><div 
class=highlight><pre tabindex=0 style=color:#93a1a1;back [...]
 </span></span><span style=display:flex><span><span 
style=color:#268bd2>&lt;dubbo:reference</span> interface=<span 
style=color:#2aa198>&#34;com.foo.BarService&#34;</span> mock=<span 
style=color:#2aa198>&#34;force:return fake&#34;</span><span 
style=color:#268bd2>/&gt;</span>
@@ -715,8 +717,8 @@
 </span></span><span style=display:flex><span><span 
style=color:#268bd2>&lt;dubbo:reference</span> id=<span 
style=color:#2aa198>&#34;demoService&#34;</span> check=<span 
style=color:#2aa198>&#34;false&#34;</span> interface=<span 
style=color:#2aa198>&#34;com.foo.BarService&#34;</span><span 
style=color:#268bd2>&gt;</span>
 </span></span><span style=display:flex><span>    <span 
style=color:#268bd2>&lt;dubbo:parameter</span> key=<span 
style=color:#2aa198>&#34;sayHello.mock&#34;</span> value=<span 
style=color:#2aa198>&#34;force:return fake&#34;</span><span 
style=color:#268bd2>/&gt;</span>
 </span></span><span style=display:flex><span><span 
style=color:#268bd2>&lt;/dubbo:reference&gt;</span>
-</span></span></code></pre></div><div class="alert alert-primary" 
role=alert><h4 class=alert-heading>注意事项</h4></div><div 
id=pre-footer><h2>反馈</h2><p class=feedback--prompt>此页是否对您有帮助?</p><button 
class="btn btn-primary mb-4 feedback--yes">是</button>
-<button class="btn btn-primary mb-4 
feedback--no">否</button></div><script>const 
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
 
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
 [...]
+</span></span></code></pre></div><div id=pre-footer><h2>反馈</h2><p 
class=feedback--prompt>此页是否对您有帮助?</p><button class="btn btn-primary mb-4 
feedback--yes">是</button>
+<button class="btn btn-primary mb-4 
feedback--no">否</button></div><script>const 
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
 
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
 [...]
 <a 
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock.md?filename=change-me.md&amp;value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-star
 [...]
 <a 
href="https://github.com/apache/dubbo-website/issues/new?title=%e6%9c%ac%e5%9c%b0%e4%bc%aa%e8%a3%85";
 target=_blank><i class="fab fa-github fa-fw"></i> 登记问题</a>
 <a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas 
fa-tasks fa-fw"></i> 提交项目问题</a></div></main><div class="d-none d-xl-block 
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><a 
href=#特性说明>特性说明</a></li><li><a href=#使用场景>使用场景</a></li><li><a 
href=#使用方式>使用方式</a><ul><li><a href=#开启-mock-配置>开启 Mock 配置</a></li><li><a 
href=#使用-return-关键字-mock-返回值>使用 return 关键字 Mock 返回值</a></li><li><a 
href=#使用-throw-关键字-mock-抛出异常>使用 throw 关键字 Mock 抛出异常</a></li><li><a href= [...]
diff --git a/zh-cn/sitemap.xml b/zh-cn/sitemap.xml
index 0fa8523b96..6902259aca 100644
--- a/zh-cn/sitemap.xml
+++ b/zh-cn/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset 
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml";><url><loc>https://cn.dubbo.apache.org/zh-cn/blog/2023/01/16/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E5%8D%87%E7%BA%A7-dubbo3-%E5%85%A8%E9%9D%A2%E5%8F%96%E4%BB%A3-hsf2/</loc><lastmod>2023-02-22T15:03:22+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://cn.dubbo.apache.org/zh-cn/overview/mannu
 [...]
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset 
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml";><url><loc>https://cn.dubbo.apache.org/zh-cn/blog/2023/01/16/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E5%8D%87%E7%BA%A7-dubbo3-%E5%85%A8%E9%9D%A2%E5%8F%96%E4%BB%A3-hsf2/</loc><lastmod>2023-02-22T15:03:22+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://cn.dubbo.apache.org/zh-cn/overview/mannu
 [...]
\ No newline at end of file

Reply via email to