Instruction:
作为 Java 安全专家，检测此代码中的安全漏洞：
## 内容1
### 文件路径：
xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/Content.xml
### 代码内容：
<?xml version="1.1" encoding="UTF-8"?>

<!--
 * See the NOTICE file distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-->

<xwikidoc version="1.2" reference="AppWithinMinutes.Content" locale="">
  <web>AppWithinMinutes</web>
  <name>Content</name>
  <language/>
  <defaultLanguage/>
  <translation>0</translation>
  <creator>xwiki:XWiki.Admin</creator>
  <parent>AppWithinMinutes.FormFieldClass</parent>
  <author>xwiki:XWiki.Admin</author>
  <contentAuthor>xwiki:XWiki.Admin</contentAuthor>
  <version>1.1</version>
  <title>$services.localization.render('platform.appwithinminutes.classEditorContentFieldName')</title>
  <comment/>
  <minorEdit>false</minorEdit>
  <syntaxId>xwiki/2.1</syntaxId>
  <hidden>true</hidden>
  <content>{{velocity}}
#if ($type == 'edit')
  #set ($className = $object.getxWikiClass().name)
  #if ($doc.fullName == $className)
    ## We are editing the class so the content must be read from / written to the template document.
    #set ($name = 'templateContent')
    #set ($editedDocument = $xwiki.getDocument("$stringtool.removeEnd($className, 'Class')Template"))
    ## Don't load the WYSIWYG editor when editing the class, because it's too heavy.
    #set ($useWysiwygEditor = false)
  #else
    ## We are editing an application entry so the content must be read from / written to the current document.
    #set ($name = 'content')
    #set ($editedDocument = $tdoc)
    ## Use the preferred content editor.
    #set ($useWysiwygEditor = $xwiki.getUserPreference('editor') == 'Wysiwyg')
  #end
  {{html clean="false"}}
  ## The "content" id is expected by some JavaScript and CSS code.
  #set ($id = 'content')
  #if (!$useWysiwygEditor)
    <div id="xwikieditcontentinner">
      ## The tool bar may have an entry to insert an HTML macro. Make sure it doesn't break the HTML macro we are currently in.
      #set ($toolBar = "#template('simpleedittoolbar.vm')")
      $!toolBar.replace('{{', '&#123;&#123;')
      ## Display a simple textarea.
      <textarea id="$id" cols="80" rows="25" name="$name">$escapetool.xml($editedDocument.content)</textarea>
  #end
  #if ($useWysiwygEditor)
    $!services.edit.syntaxContent.wysiwyg($editedDocument.content, $editedDocument.syntax, {
      'id': "$id",
      'name': "$name",
      'rows': 25,
      'cols': 80,
      'full': true
    })
  #else
    </div>
  #end
  {{/html}}
#elseif ("$!type" != '')
  ## Include the content of the current document.
  ## Escape {{ in the rendered content to be sure that the HTML macro is not closed unintentionally.
  {{html}}$tdoc.getRenderedContent($tdoc.content, $tdoc.syntax.toIdString()).replace('{{', '&amp;#123;&amp;#123;'){{/html}}
#else
  The display mode is not specified!
#end
{{/velocity}}</content>
  <class>
    <name>AppWithinMinutes.Content</name>
    <customClass/>
    <customMapping/>
    <defaultViewSheet/>
    <defaultEditSheet/>
    <defaultWeb/>
    <nameField/>
    <validationScript/>
    <content>
      <customDisplay>{{include reference="AppWithinMinutes.Content"/}}</customDisplay>
      <disabled>0</disabled>
      <name>content</name>
      <number>1</number>
      <prettyName>Content</prettyName>
      <script/>
      <unmodifiable>0</unmodifiable>
      <validationMessage/>
      <validationRegExp/>
      <classType>com.xpn.xwiki.objects.classes.ComputedFieldClass</classType>
    </content>
  </class>
  <object>
    <name>AppWithinMinutes.Content</name>
    <number>0</number>
    <className>AppWithinMinutes.FormFieldClass</className>
    <guid>1fc40ef2-e504-46e2-a651-ec26727d2f93</guid>
    <class>
      <name>AppWithinMinutes.FormFieldClass</name>
      <customClass/>
      <customMapping/>
      <defaultViewSheet/>
      <defaultEditSheet/>
      <defaultWeb/>
      <nameField/>
      <validationScript/>
      <category>
        <cache>0</cache>
        <classname>AppWithinMinutes.FormFieldCategoryClass</classname>
        <customDisplay/>
        <disabled>0</disabled>
        <displayType>select</displayType>
        <idField/>
        <multiSelect>0</multiSelect>
        <name>category</name>
        <number>2</number>
        <picker>0</picker>
        <prettyName>Category</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <separators/>
        <size>1</size>
        <sort>none</sort>
        <sql/>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <valueField/>
        <classType>com.xpn.xwiki.objects.classes.DBListClass</classType>
      </category>
      <icon>
        <customDisplay/>
        <disabled>0</disabled>
        <name>icon</name>
        <number>2</number>
        <picker>0</picker>
        <prettyName>Icon</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </icon>
      <priority>
        <customDisplay/>
        <disabled>0</disabled>
        <name>priority</name>
        <number>3</number>
        <numberType>long</numberType>
        <prettyName>Priority</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.NumberClass</classType>
      </priority>
      <properties>
        <customDisplay/>
        <disabled>0</disabled>
        <name>properties</name>
        <number>5</number>
        <picker>0</picker>
        <prettyName>Properties</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </properties>
    </class>
    <property>
      <category>AppWithinMinutes.Document</category>
    </property>
    <property>
      <icon>edit</icon>
    </property>
    <property>
      <priority>0</priority>
    </property>
    <property>
      <properties/>
    </property>
  </object>
</xwikidoc>

Output:
【漏洞类型】业务逻辑安全问题 - 不安全的HTML内容渲染
【严重性】Medium
【漏洞摘要】此代码存在一个安全漏洞，即不安全的HTML内容渲染。在原始代码中，当类型为'edit'时，使用了`$escapetool.xml($editedDocument.content)`来渲染内容。然而，当类型不为'edit'时，直接使用了`$tdoc.getRenderedContent($tdoc.content, $tdoc.syntax.toIdString())`来渲染内容，这可能导致潜在的跨站脚本攻击（XSS），因为`getRenderedContent`函数没有进行充分的HTML转义，攻击者可以通过提交恶意HTML内容来执行脚本。
【关键代码模式】相关的关键代码模式包括`getRenderedContent`函数和`replace`方法的使用。
【修复方法说明】修复方法通过`$services.display.content($tdoc, {'displayerHint': 'default'})`来安全地渲染内容，并且使用`replace`方法对`/html`进行额外的转义，以防止HTML宏被意外关闭，从而缓解了XSS攻击的风险。


Instruction:
作为 Java 安全专家，检测此代码中的安全漏洞：
## 内容1
### 文件路径：
xwiki-platform-core/xwiki-platform-invitation/xwiki-platform-invitation-ui/src/main/resources/Invitation/InvitationCommon.xml
### 代码内容：
<?xml version="1.1" encoding="UTF-8"?>

<xwikidoc version="1.4" reference="Invitation.InvitationCommon" locale="">
  <web>Invitation</web>
  <name>InvitationCommon</name>
  <language/>
  <defaultLanguage/>
  <translation>0</translation>
  <creator>xwiki:XWiki.Admin</creator>
  <parent>Invitation.WebHome</parent>
  <author>xwiki:XWiki.Admin</author>
  <contentAuthor>xwiki:XWiki.Admin</contentAuthor>
  <version>1.1</version>
  <title/>
  <comment/>
  <minorEdit>false</minorEdit>
  <syntaxId>xwiki/2.1</syntaxId>
  <hidden>true</hidden>
  <content>{{velocity}}
#*
 * Invitation Application
 * This document contains common macros used by all documents in the Invitation Application.
 *
 * Macros in this script don't rely on any variables except those which are passed to them and the following:
 *
 * $doc the com.xpn.xwiki.api.Document object representing the document containing this code.
 * $msg the internationalization message provider containing a get(String) and a get(String, List) function
 * $xcontext the com.xpn.xwiki.Context object for this request
 * $xwiki an object of the com.xpn.xwiki.api.XWiki class.
 * $escapetool an object of class org.apache.velocity.tools.generic.EscapeTool
 * $util used to get a newline character ($util.getNewLine())
 *
 * No macros in this script depend on any other macros.
 *###
##
#if($request.getParameter('test') == '1')
  {{info}}testLoadInvitationConfig{{/info}}
  #testLoadInvitationConfig()
#elseif($doc.documentReference.name == 'InvitationCommon')
  #set ($linkTarget = "${doc.getSpace()}.WebHome")
  #set ($linkTarget = $services.rendering.escape($linkTarget, 'xwiki/2.1'))
  {{info}}$services.localization.render('xe.invitation.internalDocument', [$linkTarget]){{/info}}
#end
##
#*
 * Display a message for the sender (preview) or for the admin (review sent messages)
 *
 * $mail (XObject representing email message) the message to view
 *
 * $recipients (List<String>) (Optional) the list of email addresses to override the list provided by $mail
 *                                       used for preview because createMailFromTemplate will exclude addresses
 *                                       which are invalid and we want to show the invalid addresses to the
 *                                       user to tell them that they need to correct them.
 *
 * $invalidAddresses (List<String>) (Optional) List of invalid email addresses in recipients. Needed if you want to
 *                                             show the user that they made a mistake on some addresses.
 *                                             For each email in $invalidEmails, if it is also in $recipients, then it
 *                                             will be marked but left in the same order, emails in $invlaidEmails but
 *                                             not found in $recipients will end up at the end of the list.
 *###
#macro(displayMessage, $mail, $recipients, $invalidAddresses)

  {{html wiki=false clean=false}}

   $escapetool.xml($services.localization.render('xe.invitation.previewLabel'))

    #set($recips = [])
    #set($invalid = [])
    ## get the lists of valid and invalid email addresses.
    #if("$!invalidAddresses" == '')
      #set($invalid = [])
      #if("$!recipients" == '')
        #set($recips = [$mail.getProperty('recipient').getValue().trim()])
      #else
        #set($discard = $recips.addAll($recipients))
      #end
    #else
      ## Set to local variables to prevent altering input values.
      #set($discard = $recips.addAll($recipients))
      #set($discard = $invalid.addAll($invalidAddresses))
    #end
    ## Print the email addresses to be sent to.
    ## To:
    $escapetool.xml($services.localization.render('xe.invitation.toLabel'))

     #foreach($recip in $recips)
       #if($invalid.contains($recip))
         $!escapetool.xml($!recip) ##
         #set($discard = $invalid.remove($recip))
       #else
         $!escapetool.xml($!recip) ##
       #end
     #end
     #foreach($recip in $invalid)
       $!escapetool.xml($!recip) ##
     #end
     &nbsp; ## used to make the field the correct size if it's empty.

    ## Tell the user that some of the email addresses are invalid.
    #if($invalidAddresses && $invalidAddresses.size() > 0)

        #if($recips.size() == 1)
          ## The email address given is invalid and will not be sent to.
          $escapetool.xml($services.localization.render('xe.invitation.displayMessage.theAddressIsInvalid'))
        #else
          #if($invalid.size() > 1)
            $escapetool.xml($services.localization.render('xe.invitation.displayMessage.someAddressesAreInvalid', [$invalidAddresses.size()]))
          #else
            $escapetool.xml($services.localization.render('xe.invitation.displayMessage.anAddressesIsInvalid'))
          #end
        #end

    #end
     ## Subject:
     $escapetool.xml($services.localization.render('xe.invitation.subjectLabel'))

     $escapetool.xml($mail.getProperty('subjectLine').getValue())

    ## Message:
    $escapetool.xml($services.localization.render('xe.invitation.contentLabel'))

     $mail.getProperty('messageBody').getValue()

  {{/html}}

#end
##
#*
 * Load the configuration.
 * Only works if the script calling this macro has permission to view InvitationConfig
 * (or create it if it doesn't exist)
 *
 * $config (Map<String, String>) will be populated with invitation configuration.
 *
 * $configDocName (String) (Optional) will load configuration from this document, if not specified will use
 *                                    'InvitationConfig' in the same space as $doc.
 *
 * $configClassName (String) (Optional) will load configuration from object of this class, if not specified will use
 *                                      'Invitation' in the same space as $doc.
 *###
#macro(loadInvitationConfig, $config, $configDocName, $configClassName)
  #define($discard)
    #if("$!configDocName" == '')
      #set($configDocNameInternal = "${doc.getSpace()}.InvitationConfig")
    #else
      #set($configDocNameInternal = $configDocName)
    #end
    #if("$!configClassName" == '')
      #set($configClassNameInternal = "${doc.getSpace()}.WebHome")
    #else
      #set($configClassNameInternal = $configClassName)
    #end
    ##
    ## Load some parameters from the configuration.
    #set($configDoc = $xwiki.getDocumentAsAuthor($configDocNameInternal))
    ##
    ## If no configuration document exists, create one and save it.
    #if($configDoc.isNew())
      ##
      ## load the default configuration from this document.
      #set($thisDocument = $xwiki.getDocumentAsAuthor("${doc.getSpace()}.InvitationCommon"))
      #set($defaultConfigObj = $thisDocument.getObject($configClassNameInternal))
      #foreach($element in $defaultConfigObj.getProperties())
        $config.put($element.getName(), $defaultConfigObj.getProperty($element.getName()).getValue())
      #end
      ##
      #set($configDocContent =
        '{{velocity}}{{info}}$services.localization.render(''xe.invitation.internalDocument'','
          + '[$services.rendering.escape("' + "$!config.get('mainPage')"
          + '", ''xwiki/2.1'')]){{/info}}{{/velocity}}')
      $configDoc.setContent($configDocContent)
      $configDoc.setParent($configClassNameInternal)
      #set($configObj = $configDoc.newObject($configClassNameInternal))
      #foreach($key in $config.keySet())
        $configObj.set($key, $config.get($key))
      #end
      ## Now create the configurable objects.
      #set($cfgable = $configDoc.newObject('XWiki.ConfigurableClass'))
      $cfgable.set('displayInSection', 'Invitation')
      $cfgable.set('configurationClass', $configClassNameInternal)
      $cfgable.set('configureGlobally', 1)
      #set($propsToShow = 'subjectLineTemplate|messageBodyTemplate|emailRegex|from_address|allowUsersOfOtherWikis'
                        + '|usersMayPersonalizeMessage|usersMaySendToMultiple|emailClass|emailContainer')
      $cfgable.set('propertiesToShow', $propsToShow)
      #set($cfgable = $configDoc.newObject('XWiki.ConfigurableClass'))
      $cfgable.set('displayInSection', 'Invitation')
      $cfgable.set('heading', '$services.localization.render(''xe.invitation.configuration.smtpHeading'')')
      $cfgable.set('configurationClass', $configClassNameInternal)
      $cfgable.set('configureGlobally', 1)
      $cfgable.set('propertiesToShow',
                        'smtp_server_password|smtp_server_username|smtp_port|smtp_server|javamail_extra_props')
      $configDoc.saveAsAuthor()
    #else
      ## load the configuration object...
      #set($configObj = $configDoc.getObject($configClassNameInternal))
      #foreach($element in $configObj.getProperties())
        $config.put($element.getName(), $configObj.getProperty($element.getName()).getValue())
      #end
    #end
  #end## define $discard
  ## Now invoke the defined code...
  #set($discard = $discard.toString())
#end
##
#*
 * Basic unit testing of the macro above.
 *###
#macro(testLoadInvitationConfig)
  #set($configDoc = $xwiki.getDocumentAsAuthor("${doc.getSpace()}.InvitationConfig"))
  #if(!$configDoc.isNew())
    $configDoc.deleteAsAuthor()
  #end
  #set($configClass = $xwiki.getDocumentAsAuthor("${doc.getSpace()}.WebHome"))
  #if($configClass.isNew())
    #set ($classDocumentLink = $services.rendering.escape("${doc.getSpace()}.WebHome", 'xwiki/2.1'))
    {{error}}Class document [[$classDocumentLink]] not found. can't run test.{{/error}}
  #else
    #set($config = {})
    #loadInvitationConfig($config, 'HopefullyNonexistantSpace')
    #if($config.size() < 9)
      {{error}}Config map too small{{/error}}
    #end
    #if($config.get('from_address') != 'no-reply@localhost.localdomain')
      {{error}}form_address incorrect, expecting "no-reply@localhost.localdomain" got "$config.get('from_address')"{{/error}}
    #end
    #set($configDoc = $xwiki.getDocumentAsAuthor("${doc.getSpace()}.InvitationConfig"))
    #if($configDoc.isNew())
      {{error}}Config document not created{{/error}}
    #else
      #set($configObj = $configDoc.getObject("${doc.getSpace()}.Invitation"))
      $configObj.set('from_address', 'thisisatest@localhost.localdomain')
      $configDoc.saveAsAuthor()
      $config.clear()
      #loadInvitationConfig($config, 'HopefullyNonexistantSpace')
      #if($config.get('from_address') != 'thisisatest@localhost.localdomain')
        {{error}}altering config parameter failed.{{/error}}
      #end
    #end
  #end
  #set($configDoc = $xwiki.getDocumentAsAuthor("${doc.getSpace()}.InvitationConfig"))
  #if(!$configDoc.isNew())
    $configDoc.deleteAsAuthor()
  #end
#end
##
#**
 * Load mail from mail containing document.
 *
 * $config (Map<String, String>) will be used to get the name of the email class.
 *
 * $emailContainer (Document) the document to get the email from.
 *
 * $mail (Map<String, XObject>) will be populated with email message XObjects by their messageID.
 *###
#macro(loadInvitationMail, $config, $emailContainer, $mail)
  ## If this doesn't already exist, it's created.
  #if($emailContainer.isNew())
    #set($emailContainerContent =
      '{{velocity}}{{info}}$services.localization.render(''xe.invitation.internalDocument'','
        + '[$services.rendering.escape("' + "$config.get('emailContainer')"
        + '", ''xwiki/2.1'')]){{/info}}{{/velocity}}')
    #set($discard = $emailContainer.setContent($emailContainerContent))
    #set($discard = $emailContainer.setHidden(true))
    #set($discard = $emailContainer.saveAsAuthor())
  #end
  ##
  ## Load messages into a Map by messageID.
  #foreach($obj in $emailContainer.getObjects($config.get('emailClass')))
    #set($discard = $mail.put($obj.getProperty('messageID').getValue(), $obj))
  #end
#end
##
#**
 * Is a guest allowed to accept an invitation?
 *
 * $guestActionsDoc (Document) the document which guests will use to register.
 *###
#macro(canGuestAcceptInvitation, $guestActionsDoc)
  #set($out = 'true')
  #if(!$xwiki.hasAccessLevel('register', 'XWiki.XWikiGuest', 'XWiki.XWikiPreferences')
      && !$guestActionsDoc.hasProgrammingRights())
  ##
    #set($out = 'false')
  #end
  $out##
#end
##
#**
 * Get the action taken by the user.
 * This will interpret actions taken using displayActionConfirmationForm
 *
 * $parameterMap (Map<String, String>) the parameter map gotten by calling getParameterMap on the servlet request.
 *
 * $actionOutList (List<String>) will be populated with a single value (the action)
 *###
#macro(getUserAction, $parameterMap, $actionOutList)
  #set($actionInternal = 0)
  #foreach($param in $parameterMap.keySet())
    #if($param.indexOf('doAction_') != -1)
      ## Strip 'doAction_'
      #set($actionInternal = $param.substring(9))
    #end
  #end
  #if($actionInternal != 0)
    #set($discard = $actionOutList.add($actionInternal))
  #end
#end
##
#*
 * Display a form allowing a user to confirm doing an action.
 *
 * $messageIDs (List<String>) the unique IDs of the invitations to act upon.
 *
 * $action (String) the action to do.
 *
 * $memoLabel (String) what the memo field should be labeled.
 *
 * $confirmLabel (String) what the confirm button should say.
 *
 * $additionalParameters (Map<String, String>) these parameters will be xml escaped and placed in hidden input fields.
 *###
#macro(displayActionConfirmationForm, $messageIDs, $action, $memoLabel, $confirmLabel, $additionalParameters)
  {{html wiki=false clean=false}}

   <form action="$doc.getURL()" method="POST">
    ##
    #foreach($id in $messageIDs)
      <input type="hidden" name="messageID" value="$escapetool.xml($id)" />
    #end
    <input type="hidden" name="confirm" value="y" />
    <input type="hidden" name="form_token" value="$!{services.csrf.getToken()}" />
    #if($additionalParameters && $additionalParameters.size() > 0)
      #foreach($param in $additionalParameters.keySet())
        <input type="hidden" name="$escapetool.xml($param)" value="$escapetool.xml($additionalParameters.get($param))" />
      #end
    #end
    ##

$memoLabel

<input type="text" size="54" name="memo" />

       <input type="submit" class="button" name="doAction_$escapetool.xml($action)" value="$confirmLabel" />

   </form>

  {{/html}}
#end
##
#*
 * Set the status of a message and log the memo.
 *
 * $message (Xobject) the message to act on.
 *
 * $status (String) the status to set the message to.
 *
 * $memo (String) what to enter in the log.
 *###
#macro(setMessageStatus, $message, $status, $memo)
   $message.set('status', $status)##
   #set($history = $message.getProperty('history').getValue())
   #set($statusWord = "#messageStatusForCode($status)")
   ## disallow injection of \n which starts a new line or { which may be used for macros.
   #set($log = $memo.replaceAll('\n', ' ').replaceAll('\{', '~{'))
   #set($entry = "|$statusWord|[[$xcontext.getUser()]]|$!log")
   #if("$!history" != '')
     $message.set('history', "$!history$util.getNewline()$entry")##
   #else
     $message.set('history', $entry)##
   #end
#end
##
#*
 * Get the last memo from the message history.
 *
 * $message (Xobject) the message to act on.
 *###
#macro(getLastMemo, $message)
  #set($history = "$!message.getProperty('history').getValue()")
  #set($indexAfterLastNewline = $mathtool.add($history.lastIndexOf($util.getNewline()), 1))
  #if($indexAfterLastNewline < $history.length())
    #set($entry = "$!history.substring($indexAfterLastNewline)")
    #set($indexAfterLastPipe = $mathtool.add($entry.lastIndexOf('|'), 1))
    #if($indexAfterLastPipe < $entry.length())
        $entry.substring($indexAfterLastPipe)##
    #end
  #end
#end
##
#*
 * Get the status of the current message for it's code.
 * unsent - not sent yet.
 * pending - sent and awating a response
 * accepted - sent and accepted by recipient
 * declined - sent and declined by recipient
 * canceled - sent then canceled by sender
 * reported - as spam (by recipient)
 * notSpam - reported as spam and investigated (by admin)
 * sendingFailed - failed to send message
 * else - unknown status
 *
 * $status (String) the status of the message.
 *###
#macro(messageStatusForCode, $status)
  #if($status == 'unsent')
    $services.localization.render('xe.invitation.messageStatus.unsent')##
  #elseif($status == 'pending')
    $services.localization.render('xe.invitation.messageStatus.pending')##
  #elseif($status == 'accepted')
    $services.localization.render('xe.invitation.messageStatus.accepted')##
  #elseif($status == 'declined')
    $services.localization.render('xe.invitation.messageStatus.declined')##
  #elseif($status == 'canceled')
    $services.localization.render('xe.invitation.messageStatus.canceled')##
  #elseif($status == 'reported')
    $services.localization.render('xe.invitation.messageStatus.reported')##
  #elseif($status == 'notSpam')
    $services.localization.render('xe.invitation.messageStatus.investigated')##
  #elseif($status == 'sendingFailed')
    $services.localization.render('xe.invitation.messageStatus.sendingFailed')##
  #else
    $services.localization.render('xe.invitation.messageStatus.unknown', [$escapetool.xml($status)])##
  #end
#end
{{/velocity}}</content>
  <object>
    <name>Invitation.InvitationCommon</name>
    <number>0</number>
    <className>Invitation.WebHome</className>
    <guid>5b0a8220-404d-4d1b-b162-0ebcf323181e</guid>
    <class>
      <name>Invitation.WebHome</name>
      <customClass/>
      <customMapping/>
      <defaultViewSheet/>
      <defaultEditSheet/>
      <defaultWeb/>
      <nameField/>
      <validationScript/>
      <allowUsersOfOtherWikis>
        <defaultValue/>
        <disabled>0</disabled>
        <displayFormType>checkbox</displayFormType>
        <displayType/>
        <name>allowUsersOfOtherWikis</name>
        <number>4</number>
        <prettyName>Let users of other wikis send</prettyName>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.BooleanClass</classType>
      </allowUsersOfOtherWikis>
      <commonPage>
        <disabled>0</disabled>
        <name>commonPage</name>
        <number>18</number>
        <picker>0</picker>
        <prettyName>common</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </commonPage>
      <emailClass>
        <cache>0</cache>
        <classname/>
        <customDisplay/>
        <disabled>0</disabled>
        <displayType>input</displayType>
        <hint/>
        <idField/>
        <multiSelect>0</multiSelect>
        <name>emailClass</name>
        <number>5</number>
        <picker>1</picker>
        <prettyName>Email message XClass</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <separators/>
        <size>30</size>
        <sort>none</sort>
        <sql/>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <valueField/>
        <classType>com.xpn.xwiki.objects.classes.PageClass</classType>
      </emailClass>
      <emailContainer>
        <cache>0</cache>
        <classname/>
        <customDisplay/>
        <disabled>0</disabled>
        <displayType>input</displayType>
        <hint/>
        <idField/>
        <multiSelect>0</multiSelect>
        <name>emailContainer</name>
        <number>9</number>
        <picker>1</picker>
        <prettyName>Document containing email XObjects</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <separators/>
        <size>30</size>
        <sort>none</sort>
        <sql/>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <valueField/>
        <classType>com.xpn.xwiki.objects.classes.PageClass</classType>
      </emailContainer>
      <emailRegex>
        <disabled>0</disabled>
        <name>emailRegex</name>
        <number>7</number>
        <picker>0</picker>
        <prettyName>Regular expression for validating email addresses</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </emailRegex>
      <from_address>
        <disabled>0</disabled>
        <name>from_address</name>
        <number>1</number>
        <picker>0</picker>
        <prettyName>Email "from" address</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </from_address>
      <guestsActionsPage>
        <disabled>0</disabled>
        <name>guestsActionsPage</name>
        <number>14</number>
        <picker>0</picker>
        <prettyName>guestsActions</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </guestsActionsPage>
      <javamail_extra_props>
        <disabled>0</disabled>
        <editor>---</editor>
        <name>javamail_extra_props</name>
        <number>15</number>
        <picker>0</picker>
        <prettyName>Javamail extra properties</prettyName>
        <rows>5</rows>
        <size>40</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>
      </javamail_extra_props>
      <mainPage>
        <disabled>0</disabled>
        <name>mainPage</name>
        <number>19</number>
        <picker>0</picker>
        <prettyName>mainPage</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </mainPage>
      <membersActionsPage>
        <disabled>0</disabled>
        <name>membersActionsPage</name>
        <number>16</number>
        <picker>0</picker>
        <prettyName>membersActions</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </membersActionsPage>
      <membersCommonPage>
        <disabled>0</disabled>
        <name>membersCommonPage</name>
        <number>17</number>
        <picker>0</picker>
        <prettyName>membersCommon</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </membersCommonPage>
      <messageBodyTemplate>
        <disabled>0</disabled>
        <editor>---</editor>
        <name>messageBodyTemplate</name>
        <number>3</number>
        <picker>0</picker>
        <prettyName>Email message body HTML template</prettyName>
        <rows>5</rows>
        <size>40</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>
      </messageBodyTemplate>
      <messageBodyTemplatePlain>
        <disabled>0</disabled>
        <editor>---</editor>
        <name>messageBodyTemplatePlain</name>
        <number>20</number>
        <picker>0</picker>
        <prettyName>Message body plain text template</prettyName>
        <rows>5</rows>
        <size>40</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>
      </messageBodyTemplatePlain>
      <smtp_port>
        <disabled>0</disabled>
        <name>smtp_port</name>
        <number>13</number>
        <picker>0</picker>
        <prettyName>Smtp port</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </smtp_port>
      <smtp_server>
        <disabled>0</disabled>
        <name>smtp_server</name>
        <number>12</number>
        <picker>0</picker>
        <prettyName>Smtp server host name</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </smtp_server>
      <smtp_server_password>
        <disabled>0</disabled>
        <name>smtp_server_password</name>
        <number>11</number>
        <picker>0</picker>
        <prettyName>Smtp password</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </smtp_server_password>
      <smtp_server_username>
        <disabled>0</disabled>
        <name>smtp_server_username</name>
        <number>10</number>
        <picker>0</picker>
        <prettyName>Smtp username</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </smtp_server_username>
      <subjectLineTemplate>
        <disabled>0</disabled>
        <name>subjectLineTemplate</name>
        <number>2</number>
        <picker>0</picker>
        <prettyName>Email subject line template</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </subjectLineTemplate>
      <usersMayPersonalizeMessage>
        <defaultValue/>
        <disabled>0</disabled>
        <displayFormType>checkbox</displayFormType>
        <displayType/>
        <name>usersMayPersonalizeMessage</name>
        <number>8</number>
        <prettyName>Let users personalize messages</prettyName>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.BooleanClass</classType>
      </usersMayPersonalizeMessage>
      <usersMaySendToMultiple>
        <defaultValue/>
        <disabled>0</disabled>
        <displayFormType>checkbox</displayFormType>
        <displayType/>
        <name>usersMaySendToMultiple</name>
        <number>6</number>
        <prettyName>Let users send to multiple addresses</prettyName>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.BooleanClass</classType>
      </usersMaySendToMultiple>
    </class>
    <property>
      <allowUsersOfOtherWikis>0</allowUsersOfOtherWikis>
    </property>
    <property>
      <commonPage>Invitation.InvitationCommon</commonPage>
    </property>
    <property>
      <emailClass>Invitation.InvitationMailClass</emailClass>
    </property>
    <property>
      <emailContainer>Invitation.InvitationMessages</emailContainer>
    </property>
    <property>
      <emailRegex>/^([^@\s]+)@((?:[-a-zA-Z0-9]+\.)+[a-zA-Z]{2,})$/</emailRegex>
    </property>
    <property>
      <from_address>no-reply@localhost.localdomain</from_address>
    </property>
    <property>
      <guestsActionsPage>Invitation.InvitationGuestActions</guestsActionsPage>
    </property>
    <property>
      <javamail_extra_props/>
    </property>
    <property>
      <mainPage>Invitation.WebHome</mainPage>
    </property>
    <property>
      <membersActionsPage>Invitation.InvitationMemberActions</membersActionsPage>
    </property>
    <property>
      <membersCommonPage>Invitation.InvitationMembersCommon</membersCommonPage>
    </property>
    <property>
      <messageBodyTemplate>{{velocity}}
#set($discard = "#template('colorThemeInit.vm')")
#if("$!theme" == "")
 #set($theme = {"linkColor":"#4791BC"})
#end
#set($userName = $xwiki.getUserName($xcontext.getUser(), false))
#set($wikiName = $xwiki.getRequestURL().replaceAll("http://([^/:]*).*$", "$1"))
#set($guestActionsURL = $xwiki.getDocumentAsAuthor($config.get("guestsActionsPage")).getExternalURL())
#set($linkStyle = "color:$theme.get('linkColor');text-decoration:none;")
#set($bigText = "font-size:130%;")
#set($joinLink = "float:left;")
#set($declineLink = "color:#f88;float:right;text-decoration:none;")

$services.localization.render('xe.invitation.emailContent.userHasInvitedYouToJoinWiki', [$userName, $wikiName])

{{html clean=false}}
#if("$!messageBody" != "")

  $!escapetool.xml($!messageBody)

#end

$services.localization.render('xe.invitation.emailContent.joinLink')

 $services.localization.render('xe.invitation.emailContent.declineLink')

$services.localization.render('xe.invitation.emailContent.reportMessage', ["", ""])
{{/html}}
{{/velocity}}</messageBodyTemplate>
    </property>
    <property>
      <messageBodyTemplatePlain>{{velocity}}
#set($userName = $xwiki.getUserName($xcontext.getUser(), false))#set($wikiName = $xwiki.getRequestURL().replaceAll("https?://([^/:]*).*$", "$1"))#set($guestActionsURL = $xwiki.getDocumentAsAuthor($config.get('guestsActionsPage')).getExternalURL())$services.localization.render('xe.invitation.emailContent.userHasInvitedYouToJoinWiki', [$userName, $wikiName])#if("$!messageBody" != '')  $messageBody#end$services.localization.render('xe.invitation.emailContent.joinLink')${guestActionsURL}?doAction_accept=y&messageID=$messageID$services.localization.render('xe.invitation.emailContent.declineLink')${guestActionsURL}?doAction_decline=y&messageID=$messageID$services.localization.render('xe.invitation.emailContent.reportMessage', ['', "$util.getNewline()${guestActionsURL}?doAction_decline=y&messageID=$messageID"]){{/velocity}}</messageBodyTemplatePlain>
    </property>
    <property>
      <smtp_port>25</smtp_port>
    </property>
    <property>
      <smtp_server>localhost</smtp_server>
    </property>
    <property>
      <smtp_server_password/>
    </property>
    <property>
      <smtp_server_username/>
    </property>
    <property>
      <subjectLineTemplate>{{velocity}}$services.localization.render('xe.invitation.emailContent.subjectLine', [$xcontext.getUser().replaceAll("^[^\.]*.", ""), $xwiki.getRequestURL().replaceAll("https?://([^/:]*).*$", "$1"), $!subjectLine]){{/velocity}}</subjectLineTemplate>
    </property>
    <property>
      <usersMayPersonalizeMessage>1</usersMayPersonalizeMessage>
    </property>
    <property>
      <usersMaySendToMultiple>0</usersMaySendToMultiple>
    </property>
  </object>
  <object>
    <name>Invitation.InvitationCommon</name>
    <number>0</number>
    <className>XWiki.StyleSheetExtension</className>
    <guid>57002efd-3fd9-45a9-bedf-d9741dcc1ac9</guid>
    <class>
      <name>XWiki.StyleSheetExtension</name>
      <customClass/>
      <customMapping/>
      <defaultViewSheet/>
      <defaultEditSheet/>
      <defaultWeb/>
      <nameField/>
      <validationScript/>
      <cache>
        <cache>0</cache>
        <defaultValue>long</defaultValue>
        <disabled>0</disabled>
        <displayType>select</displayType>
        <freeText>forbidden</freeText>
        <largeStorage>0</largeStorage>
        <multiSelect>0</multiSelect>
        <name>cache</name>
        <number>5</number>
        <prettyName>Caching policy</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <separators>|, </separators>
        <size>1</size>
        <unmodifiable>0</unmodifiable>
        <values>long|short|default|forbid</values>
        <classType>com.xpn.xwiki.objects.classes.StaticListClass</classType>
      </cache>

        <contenttype>PureText</contenttype>
        <disabled>0</disabled>
        <editor>PureText</editor>
        <name>code</name>
        <number>2</number>
        <prettyName>Code</prettyName>
        <rows>20</rows>
        <size>50</size>
        <unmodifiable>0</unmodifiable>
        <classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>

      <contentType>
        <cache>0</cache>
        <disabled>0</disabled>
        <displayType>select</displayType>
        <freeText>forbidden</freeText>
        <largeStorage>0</largeStorage>
        <multiSelect>0</multiSelect>
        <name>contentType</name>
        <number>6</number>
        <prettyName>Content Type</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <separators>|, </separators>
        <size>1</size>
        <unmodifiable>0</unmodifiable>
        <values>CSS|LESS</values>
        <classType>com.xpn.xwiki.objects.classes.StaticListClass</classType>
      </contentType>
      <name>
        <disabled>0</disabled>
        <name>name</name>
        <number>1</number>
        <prettyName>Name</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </name>
      <parse>
        <disabled>0</disabled>
        <displayFormType>select</displayFormType>
        <displayType>yesno</displayType>
        <name>parse</name>
        <number>4</number>
        <prettyName>Parse content</prettyName>
        <unmodifiable>0</unmodifiable>
        <classType>com.xpn.xwiki.objects.classes.BooleanClass</classType>
      </parse>
      <use>
        <cache>0</cache>
        <disabled>0</disabled>
        <displayType>select</displayType>
        <freeText>forbidden</freeText>
        <largeStorage>0</largeStorage>
        <multiSelect>0</multiSelect>
        <name>use</name>
        <number>3</number>
        <prettyName>Use this extension</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <separators>|, </separators>
        <size>1</size>
        <unmodifiable>0</unmodifiable>
        <values>currentPage|onDemand|always</values>
        <classType>com.xpn.xwiki.objects.classes.StaticListClass</classType>
      </use>
    </class>
    <property>
      <cache>long</cache>
    </property>
    <property>
      #template("colorThemeInit.vm")
.invitation, .invitation input[type='text'], .invitation textarea, .invitation table {
  float: left;
  width: 450px;
}

/* Keep the table from overflowing */
.invitation .message-table table, .invitation .history-table table {
  table-layout: fixed;
  word-wrap: break-word;
}
.invitation table th.checkboxcol {
  width: 5%
}
.invitation table th.sentDate {
  width: 15%
}
.invitation table th.recipient {
  width: 28%
}
.invitation table th.history {
  width: 18%
}
/* For message history table */
.invitation table th.status-set-to {
  width: 10%
}
.invitation table th.log-entry {
  width: 60%
}

.invitation-preview {
  background-color: #FCFCFC;
  border: 1px solid $theme.get('menuSelectedEntryBackgroundColor');
  padding: 3px;
}

.invitation-preview, .right-side {
  margin-left: 30px;
}

.invitation-preview .field {
  background-color: $theme.get('pageContentBackgroundColor');
  margin-left: 20px;
  margin-bottom: 10px;
  padding: 10px;
  overflow: hidden;

  /* Makes the field fit with padding and margins. */
  width: 390px;
}

.clearboth {
  clear:both;
}

.invitation input[type='text'], .invitation textarea {
  margin-bottom: 10px;
}

/* Labels */
.invitation strong, .invitation label {
  font-size: .85em;
  text-transform: uppercase;
}

/* "Preview:" label */
.invitation strong {
  padding-left: 30px;
}

.invitation-preview strong {
  padding-left: 20px;
}
    </property>
    <property>
      <contentType>CSS</contentType>
    </property>
    <property>
      <name>Invitation Style Sheet</name>
    </property>
    <property>
      <parse>1</parse>
    </property>
    <property>
      <use>onDemand</use>
    </property>
  </object>
  <object>
    <name>Invitation.InvitationCommon</name>
    <number>0</number>
    <className>XWiki.XWikiRights</className>
    <guid>f5e4ea78-756b-46a6-87e2-8a79d9ea6cee</guid>
    <class>
      <name>XWiki.XWikiRights</name>
      <customClass/>
      <customMapping/>
      <defaultViewSheet/>
      <defaultEditSheet/>
      <defaultWeb/>
      <nameField/>
      <validationScript/>
      <allow>
        <defaultValue>1</defaultValue>
        <disabled>0</disabled>
        <displayFormType>select</displayFormType>
        <displayType>allow</displayType>
        <name>allow</name>
        <number>4</number>
        <prettyName>Allow/Deny</prettyName>
        <unmodifiable>0</unmodifiable>
        <classType>com.xpn.xwiki.objects.classes.BooleanClass</classType>
      </allow>
      <groups>
        <cache>0</cache>
        <disabled>0</disabled>
        <displayType>input</displayType>
        <multiSelect>1</multiSelect>
        <name>groups</name>
        <number>1</number>
        <picker>1</picker>
        <prettyName>Groups</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <size>5</size>
        <unmodifiable>0</unmodifiable>
        <classType>com.xpn.xwiki.objects.classes.GroupsClass</classType>
      </groups>
      <levels>
        <cache>0</cache>
        <disabled>0</disabled>
        <displayType>select</displayType>
        <multiSelect>1</multiSelect>
        <name>levels</name>
        <number>2</number>
        <prettyName>Levels</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <size>3</size>
        <unmodifiable>0</unmodifiable>
        <classType>com.xpn.xwiki.objects.classes.LevelsClass</classType>
      </levels>
      <users>
        <cache>0</cache>
        <disabled>0</disabled>
        <displayType>input</displayType>
        <multiSelect>1</multiSelect>
        <name>users</name>
        <number>3</number>
        <picker>1</picker>
        <prettyName>Users</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <size>5</size>
        <unmodifiable>0</unmodifiable>
        <classType>com.xpn.xwiki.objects.classes.UsersClass</classType>
      </users>
    </class>
    <property>
      <allow>1</allow>
    </property>
    <property>
      <groups>XWiki.XWikiAllGroup</groups>
    </property>
    <property>
      <levels>view</levels>
    </property>
    <property>
      <users>XWiki.XWikiGuest</users>
    </property>
  </object>
</xwikidoc>

## 内容2
### 文件路径：
xwiki-platform-core/xwiki-platform-invitation/xwiki-platform-invitation-ui/src/main/resources/Invitation/InvitationConfig.xml
### 代码内容：
<?xml version="1.1" encoding="UTF-8"?>

<xwikidoc version="1.5" reference="Invitation.InvitationConfig" locale="">
  <web>Invitation</web>
  <name>InvitationConfig</name>
  <language/>
  <defaultLanguage/>
  <translation>0</translation>
  <creator>xwiki:XWiki.Admin</creator>
  <parent>Invitation.WebHome</parent>
  <author>xwiki:XWiki.Admin</author>
  <contentAuthor>xwiki:XWiki.Admin</contentAuthor>
  <version>1.1</version>
  <title/>
  <comment/>
  <minorEdit>false</minorEdit>
  <syntaxId>xwiki/2.1</syntaxId>
  <hidden>true</hidden>
  <content>{{velocity}}{{info}}$services.localization.render('xe.invitation.internalDocument', ['Invitation.WebHome']){{/info}}{{/velocity}}</content>
  <attachment>
    <filename>InvitationSectionIcon.png</filename>
    <mimetype>image/png</mimetype>
    <author>xwiki:XWiki.Admin</author>
    <version>1.1</version>
    <comment/>
    <content>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</content>
    <filesize>7845</filesize>
  </attachment>
  <object>
    <name>Invitation.InvitationConfig</name>
    <number>0</number>
    <className>Invitation.WebHome</className>
    <guid>922f917b-ccec-41a4-a288-0eb6bcd05e06</guid>
    <class>
      <name>Invitation.WebHome</name>
      <customClass/>
      <customMapping/>
      <defaultViewSheet/>
      <defaultEditSheet/>
      <defaultWeb/>
      <nameField/>
      <validationScript/>
      <allowUsersOfOtherWikis>
        <defaultValue/>
        <disabled>0</disabled>
        <displayFormType>checkbox</displayFormType>
        <displayType/>
        <name>allowUsersOfOtherWikis</name>
        <number>4</number>
        <prettyName>Let users of other wikis send</prettyName>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.BooleanClass</classType>
      </allowUsersOfOtherWikis>
      <commonPage>
        <disabled>0</disabled>
        <name>commonPage</name>
        <number>18</number>
        <picker>0</picker>
        <prettyName>common</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </commonPage>
      <emailClass>
        <cache>0</cache>
        <classname/>
        <customDisplay/>
        <disabled>0</disabled>
        <displayType>input</displayType>
        <hint/>
        <idField/>
        <multiSelect>0</multiSelect>
        <name>emailClass</name>
        <number>5</number>
        <picker>1</picker>
        <prettyName>Email message XClass</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <separators/>
        <size>30</size>
        <sort>none</sort>
        <sql/>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <valueField/>
        <classType>com.xpn.xwiki.objects.classes.PageClass</classType>
      </emailClass>
      <emailContainer>
        <cache>0</cache>
        <classname/>
        <customDisplay/>
        <disabled>0</disabled>
        <displayType>input</displayType>
        <hint/>
        <idField/>
        <multiSelect>0</multiSelect>
        <name>emailContainer</name>
        <number>9</number>
        <picker>1</picker>
        <prettyName>Document containing email XObjects</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <separators/>
        <size>30</size>
        <sort>none</sort>
        <sql/>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <valueField/>
        <classType>com.xpn.xwiki.objects.classes.PageClass</classType>
      </emailContainer>
      <emailRegex>
        <disabled>0</disabled>
        <name>emailRegex</name>
        <number>7</number>
        <picker>0</picker>
        <prettyName>Regular expression for validating email addresses</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </emailRegex>
      <from_address>
        <disabled>0</disabled>
        <name>from_address</name>
        <number>1</number>
        <picker>0</picker>
        <prettyName>Email "from" address</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </from_address>
      <guestsActionsPage>
        <disabled>0</disabled>
        <name>guestsActionsPage</name>
        <number>14</number>
        <picker>0</picker>
        <prettyName>guestsActions</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </guestsActionsPage>
      <javamail_extra_props>
        <disabled>0</disabled>
        <editor>---</editor>
        <name>javamail_extra_props</name>
        <number>15</number>
        <picker>0</picker>
        <prettyName>Javamail extra properties</prettyName>
        <rows>5</rows>
        <size>40</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>
      </javamail_extra_props>
      <mainPage>
        <disabled>0</disabled>
        <name>mainPage</name>
        <number>19</number>
        <picker>0</picker>
        <prettyName>mainPage</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </mainPage>
      <membersActionsPage>
        <disabled>0</disabled>
        <name>membersActionsPage</name>
        <number>16</number>
        <picker>0</picker>
        <prettyName>membersActions</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </membersActionsPage>
      <membersCommonPage>
        <disabled>0</disabled>
        <name>membersCommonPage</name>
        <number>17</number>
        <picker>0</picker>
        <prettyName>membersCommon</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </membersCommonPage>
      <messageBodyTemplate>
        <disabled>0</disabled>
        <editor>---</editor>
        <name>messageBodyTemplate</name>
        <number>3</number>
        <picker>0</picker>
        <prettyName>Email message body HTML template</prettyName>
        <rows>5</rows>
        <size>40</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>
      </messageBodyTemplate>
      <messageBodyTemplatePlain>
        <disabled>0</disabled>
        <editor>---</editor>
        <name>messageBodyTemplatePlain</name>
        <number>20</number>
        <picker>0</picker>
        <prettyName>Message body plain text template</prettyName>
        <rows>5</rows>
        <size>40</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>
      </messageBodyTemplatePlain>
      <smtp_port>
        <disabled>0</disabled>
        <name>smtp_port</name>
        <number>13</number>
        <picker>0</picker>
        <prettyName>Smtp port</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </smtp_port>
      <smtp_server>
        <disabled>0</disabled>
        <name>smtp_server</name>
        <number>12</number>
        <picker>0</picker>
        <prettyName>Smtp server host name</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </smtp_server>
      <smtp_server_password>
        <disabled>0</disabled>
        <name>smtp_server_password</name>
        <number>11</number>
        <picker>0</picker>
        <prettyName>Smtp password</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </smtp_server_password>
      <smtp_server_username>
        <disabled>0</disabled>
        <name>smtp_server_username</name>
        <number>10</number>
        <picker>0</picker>
        <prettyName>Smtp username</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </smtp_server_username>
      <subjectLineTemplate>
        <disabled>0</disabled>
        <name>subjectLineTemplate</name>
        <number>2</number>
        <picker>0</picker>
        <prettyName>Email subject line template</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </subjectLineTemplate>
      <usersMayPersonalizeMessage>
        <defaultValue/>
        <disabled>0</disabled>
        <displayFormType>checkbox</displayFormType>
        <displayType/>
        <name>usersMayPersonalizeMessage</name>
        <number>8</number>
        <prettyName>Let users personalize messages</prettyName>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.BooleanClass</classType>
      </usersMayPersonalizeMessage>
      <usersMaySendToMultiple>
        <defaultValue/>
        <disabled>0</disabled>
        <displayFormType>checkbox</displayFormType>
        <displayType/>
        <name>usersMaySendToMultiple</name>
        <number>6</number>
        <prettyName>Let users send to multiple addresses</prettyName>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.BooleanClass</classType>
      </usersMaySendToMultiple>
    </class>
    <property>
      <allowUsersOfOtherWikis>0</allowUsersOfOtherWikis>
    </property>
    <property>
      <commonPage>Invitation.InvitationCommon</commonPage>
    </property>
    <property>
      <emailClass>Invitation.InvitationMailClass</emailClass>
    </property>
    <property>
      <emailContainer>Invitation.InvitationMessages</emailContainer>
    </property>
    <property>
      <emailRegex>/^([^@\s]+)@((?:[-a-zA-Z0-9]+\.)+[a-zA-Z]{2,})$/</emailRegex>
    </property>
    <property>
      <from_address>no-reply@localhost.localdomain</from_address>
    </property>
    <property>
      <guestsActionsPage>Invitation.InvitationGuestActions</guestsActionsPage>
    </property>
    <property>
      <javamail_extra_props/>
    </property>
    <property>
      <mainPage>Invitation.WebHome</mainPage>
    </property>
    <property>
      <membersActionsPage>Invitation.InvitationMemberActions</membersActionsPage>
    </property>
    <property>
      <membersCommonPage>Invitation.InvitationMembersCommon</membersCommonPage>
    </property>
    <property>
      <messageBodyTemplate>{{velocity}}
#set($discard = "#template('colorThemeInit.vm')")
#if("$!theme" == "")
 #set($theme = {"linkColor":"#4791BC"})
#end
#set($userName = $xwiki.getUserName($xcontext.getUser(), false))
#set($wikiName = $xwiki.getRequestURL().replaceAll("http://([^/:]*).*$", "$1"))
#set($guestActionsURL = $xwiki.getDocumentAsAuthor($config.get("guestsActionsPage")).getExternalURL())
#set($linkStyle = "color:$theme.get('linkColor');text-decoration:none;")
#set($bigText = "font-size:130%;")
#set($joinLink = "float:left;")
#set($declineLink = "color:#f88;float:right;text-decoration:none;")

$services.localization.render('xe.invitation.emailContent.userHasInvitedYouToJoinWiki', [$userName, $wikiName])

{{html clean=false}}
#if("$!messageBody" != "")

  $!escapetool.xml($!messageBody)

#end

$services.localization.render('xe.invitation.emailContent.joinLink')

 $services.localization.render('xe.invitation.emailContent.declineLink')

$services.localization.render('xe.invitation.emailContent.reportMessage', ["", ""])
{{/html}}
{{/velocity}}</messageBodyTemplate>
    </property>
    <property>
      <messageBodyTemplatePlain>{{velocity}}
#set($userName = $xwiki.getUserName($xcontext.getUser(), false))#set($wikiName = $xwiki.getRequestURL().replaceAll("https?://([^/:]*).*$", "$1"))#set($guestActionsURL = $xwiki.getDocumentAsAuthor($config.get('guestsActionsPage')).getExternalURL())$services.localization.render('xe.invitation.emailContent.userHasInvitedYouToJoinWiki', [$userName, $wikiName])#if("$!messageBody" != '')  $messageBody#end$services.localization.render('xe.invitation.emailContent.joinLink')${guestActionsURL}?doAction_accept=y&messageID=$messageID$services.localization.render('xe.invitation.emailContent.declineLink')${guestActionsURL}?doAction_decline=y&messageID=$messageID$services.localization.render('xe.invitation.emailContent.reportMessage', ['', "$util.getNewline()${guestActionsURL}?doAction_decline=y&messageID=$messageID"]){{/velocity}}</messageBodyTemplatePlain>
    </property>
    <property>
      <smtp_port>25</smtp_port>
    </property>
    <property>
      <smtp_server>localhost</smtp_server>
    </property>
    <property>
      <smtp_server_password/>
    </property>
    <property>
      <smtp_server_username/>
    </property>
    <property>
      <subjectLineTemplate>{{velocity}}$services.localization.render('xe.invitation.emailContent.subjectLine', [$xcontext.getUser().replaceAll("^[^\.]*.", ""), $xwiki.getRequestURL().replaceAll("https?://([^/:]*).*$", "$1"), $!subjectLine]){{/velocity}}</subjectLineTemplate>
    </property>
    <property>
      <usersMayPersonalizeMessage>1</usersMayPersonalizeMessage>
    </property>
    <property>
      <usersMaySendToMultiple>0</usersMaySendToMultiple>
    </property>
  </object>
  <object>
    <name>Invitation.InvitationConfig</name>
    <number>0</number>
    <className>XWiki.ConfigurableClass</className>
    <guid>ce538a91-32b8-4623-9367-090c256e9c2d</guid>
    <class>
      <name>XWiki.ConfigurableClass</name>
      <customClass/>
      <customMapping/>
      <defaultViewSheet/>
      <defaultEditSheet/>
      <defaultWeb/>
      <nameField/>
      <validationScript/>
      <categoryIcon>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>categoryIcon</name>
        <number>11</number>
        <picker>0</picker>
        <prettyName>categoryIcon</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </categoryIcon>
      <codeToExecute>
        <contenttype>VelocityWiki</contenttype>
        <customDisplay/>
        <disabled>0</disabled>
        <editor>---</editor>
        <hint/>
        <name>codeToExecute</name>
        <number>7</number>
        <picker>0</picker>
        <prettyName>codeToExecute</prettyName>
        <rows>5</rows>
        <size>40</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>
      </codeToExecute>
      <configurationClass>
        <cache>0</cache>
        <classname/>
        <customDisplay/>
        <defaultValue/>
        <disabled>0</disabled>
        <displayType>input</displayType>
        <freeText/>
        <hint/>
        <idField/>
        <largeStorage>0</largeStorage>
        <multiSelect>0</multiSelect>
        <name>configurationClass</name>
        <number>3</number>
        <picker>1</picker>
        <prettyName>configurationClass</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <separators/>
        <size>30</size>
        <sort>none</sort>
        <sql/>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <valueField/>
        <classType>com.xpn.xwiki.objects.classes.PageClass</classType>
      </configurationClass>
      <displayBeforeCategory>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>displayBeforeCategory</name>
        <number>10</number>
        <picker>0</picker>
        <prettyName>displayBeforeCategory</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </displayBeforeCategory>
      <displayInCategory>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>displayInCategory</name>
        <number>9</number>
        <picker>0</picker>
        <prettyName>displayInCategory</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </displayInCategory>
      <displayInSection>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>displayInSection</name>
        <number>1</number>
        <picker>0</picker>
        <prettyName>displayInSection</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </displayInSection>
      <heading>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>heading</name>
        <number>2</number>
        <picker>0</picker>
        <prettyName>heading</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </heading>
      <iconAttachment>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>iconAttachment</name>
        <number>8</number>
        <picker>0</picker>
        <prettyName>iconAttachment</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </iconAttachment>
      <linkPrefix>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>linkPrefix</name>
        <number>5</number>
        <picker>0</picker>
        <prettyName>linkPrefix</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </linkPrefix>
      <propertiesToShow>
        <cache>0</cache>
        <customDisplay/>
        <defaultValue/>
        <disabled>0</disabled>
        <displayType>input</displayType>
        <freeText/>
        <hint/>
        <largeStorage>0</largeStorage>
        <multiSelect>1</multiSelect>
        <name>propertiesToShow</name>
        <number>6</number>
        <picker>0</picker>
        <prettyName>propertiesToShow</prettyName>
        <relationalStorage>1</relationalStorage>
        <separator> </separator>
        <separators> ,|</separators>
        <size>20</size>
        <sort>none</sort>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <values/>
        <classType>com.xpn.xwiki.objects.classes.StaticListClass</classType>
      </propertiesToShow>
      <scope>
        <cache>0</cache>
        <customDisplay/>
        <defaultValue/>
        <disabled>0</disabled>
        <displayType>select</displayType>
        <freeText/>
        <hint/>
        <largeStorage>0</largeStorage>
        <multiSelect>0</multiSelect>
        <name>scope</name>
        <number>12</number>
        <picker>1</picker>
        <prettyName>scope</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <separators>|, </separators>
        <size>1</size>
        <sort/>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <values>WIKI|SPACE|ALL_SPACES|WIKI+ALL_SPACES</values>
        <classType>com.xpn.xwiki.objects.classes.StaticListClass</classType>
      </scope>
      <sectionOrder>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>sectionOrder</name>
        <number>12</number>
        <numberType>integer</numberType>
        <prettyName>sectionOrder</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.NumberClass</classType>
      </sectionOrder>
    </class>
    <property>
      <categoryIcon/>
    </property>
    <property>
      <codeToExecute/>
    </property>
    <property>
      <configurationClass>Invitation.WebHome</configurationClass>
    </property>
    <property>
      <displayBeforeCategory/>
    </property>
    <property>
      <displayInCategory>usersgroups</displayInCategory>
    </property>
    <property>
      <displayInSection>Invitation</displayInSection>
    </property>
    <property>
      <heading/>
    </property>
    <property>
      <iconAttachment>InvitationSectionIcon.png</iconAttachment>
    </property>
    <property>
      <linkPrefix/>
    </property>
    <property>
      <propertiesToShow>
        <value>subjectLineTemplate</value>
        <value>messageBodyTemplate</value>
        <value>emailRegex</value>
        <value>from_address</value>
        <value>allowUsersOfOtherWikis</value>
        <value>usersMayPersonalizeMessage</value>
        <value>usersMaySendToMultiple</value>
        <value>emailClass</value>
        <value>emailContainer</value>
      </propertiesToShow>
    </property>
    <property>
      <scope>WIKI</scope>
    </property>
    <property>
      <sectionOrder>600</sectionOrder>
    </property>
  </object>
  <object>
    <name>Invitation.InvitationConfig</name>
    <number>1</number>
    <className>XWiki.ConfigurableClass</className>
    <guid>10608785-fe04-4114-a284-dfabc1ebfdee</guid>
    <class>
      <name>XWiki.ConfigurableClass</name>
      <customClass/>
      <customMapping/>
      <defaultViewSheet/>
      <defaultEditSheet/>
      <defaultWeb/>
      <nameField/>
      <validationScript/>
      <categoryIcon>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>categoryIcon</name>
        <number>11</number>
        <picker>0</picker>
        <prettyName>categoryIcon</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </categoryIcon>
      <codeToExecute>
        <contenttype>VelocityWiki</contenttype>
        <customDisplay/>
        <disabled>0</disabled>
        <editor>---</editor>
        <hint/>
        <name>codeToExecute</name>
        <number>7</number>
        <picker>0</picker>
        <prettyName>codeToExecute</prettyName>
        <rows>5</rows>
        <size>40</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>
      </codeToExecute>
      <configurationClass>
        <cache>0</cache>
        <classname/>
        <customDisplay/>
        <defaultValue/>
        <disabled>0</disabled>
        <displayType>input</displayType>
        <freeText/>
        <hint/>
        <idField/>
        <largeStorage>0</largeStorage>
        <multiSelect>0</multiSelect>
        <name>configurationClass</name>
        <number>3</number>
        <picker>1</picker>
        <prettyName>configurationClass</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <separators/>
        <size>30</size>
        <sort>none</sort>
        <sql/>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <valueField/>
        <classType>com.xpn.xwiki.objects.classes.PageClass</classType>
      </configurationClass>
      <displayBeforeCategory>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>displayBeforeCategory</name>
        <number>10</number>
        <picker>0</picker>
        <prettyName>displayBeforeCategory</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </displayBeforeCategory>
      <displayInCategory>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>displayInCategory</name>
        <number>9</number>
        <picker>0</picker>
        <prettyName>displayInCategory</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </displayInCategory>
      <displayInSection>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>displayInSection</name>
        <number>1</number>
        <picker>0</picker>
        <prettyName>displayInSection</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </displayInSection>
      <heading>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>heading</name>
        <number>2</number>
        <picker>0</picker>
        <prettyName>heading</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </heading>
      <iconAttachment>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>iconAttachment</name>
        <number>8</number>
        <picker>0</picker>
        <prettyName>iconAttachment</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </iconAttachment>
      <linkPrefix>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>linkPrefix</name>
        <number>5</number>
        <picker>0</picker>
        <prettyName>linkPrefix</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.StringClass</classType>
      </linkPrefix>
      <propertiesToShow>
        <cache>0</cache>
        <customDisplay/>
        <defaultValue/>
        <disabled>0</disabled>
        <displayType>input</displayType>
        <freeText/>
        <hint/>
        <largeStorage>0</largeStorage>
        <multiSelect>1</multiSelect>
        <name>propertiesToShow</name>
        <number>6</number>
        <picker>0</picker>
        <prettyName>propertiesToShow</prettyName>
        <relationalStorage>1</relationalStorage>
        <separator> </separator>
        <separators> ,|</separators>
        <size>20</size>
        <sort>none</sort>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <values/>
        <classType>com.xpn.xwiki.objects.classes.StaticListClass</classType>
      </propertiesToShow>
      <scope>
        <cache>0</cache>
        <customDisplay/>
        <defaultValue/>
        <disabled>0</disabled>
        <displayType>select</displayType>
        <freeText/>
        <hint/>
        <largeStorage>0</largeStorage>
        <multiSelect>0</multiSelect>
        <name>scope</name>
        <number>12</number>
        <picker>1</picker>
        <prettyName>scope</prettyName>
        <relationalStorage>0</relationalStorage>
        <separator> </separator>
        <separators>|, </separators>
        <size>1</size>
        <sort/>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <values>WIKI|SPACE|ALL_SPACES|WIKI+ALL_SPACES</values>
        <classType>com.xpn.xwiki.objects.classes.StaticListClass</classType>
      </scope>
      <sectionOrder>
        <customDisplay/>
        <disabled>0</disabled>
        <hint/>
        <name>sectionOrder</name>
        <number>12</number>
        <numberType>integer</numberType>
        <prettyName>sectionOrder</prettyName>
        <size>30</size>
        <unmodifiable>0</unmodifiable>
        <validationMessage/>
        <validationRegExp/>
        <classType>com.xpn.xwiki.objects.classes.NumberClass</classType>
      </sectionOrder>
    </class>
    <property>
      <categoryIcon/>
    </property>
    <property>
      <codeToExecute/>
    </property>
    <property>
      <configurationClass>Invitation.WebHome</configurationClass>
    </property>
    <property>
      <displayBeforeCategory/>
    </property>
    <property>
      <displayInCategory/>
    </property>
    <property>
      <displayInSection>Invitation</displayInSection>
    </property>
    <property>
      <heading>$services.localization.render('xe.invitation.configuration.smtpHeading')</heading>
    </property>
    <property>
      <iconAttachment/>
    </property>
    <property>
      <linkPrefix/>
    </property>
    <property>
      <propertiesToShow>
        <value>smtp_server_password</value>
        <value>smtp_server_username</value>
        <value>smtp_port</value>
        <value>smtp_server</value>
        <value>javamail_extra_props</value>
      </propertiesToShow>
    </property>
    <property>
      <scope>WIKI</scope>
    </property>
    <property>
      <sectionOrder/>
    </property>
  </object>
</xwikidoc>

Output:
【漏洞类型】HTML注入漏洞
【严重性】High
【漏洞摘要】此代码存在HTML注入漏洞，具体表现为在`subjectLineTemplate`的Velocity模板中未正确转义用户输入，可能导致攻击者通过构造恶意输入数据注入并执行任意HTML代码。问题行如下：

```
<xwikidoc>
  ...
  <subjectLineTemplate>{{velocity}}$services.localization.render('xe.invitation.emailContent.subjectLine', [$xcontext.getUser().replaceAll("^[^\.]*.", ""), $xwiki.getRequestURL().replaceAll("https?://([^/:]*).*$", "$1"), $!subjectLine]){{/velocity}}</subjectLineTemplate>
  ...
</xwikidoc>
```

根本原因在于使用`$services.localization.render`渲染本地化消息时，未对用户输入的`$xcontext.getUser()`和`$xwiki.getRequestURL()`进行充分的转义处理。这使得攻击者可以通过控制这些输入来注入恶意HTML代码。

【关键代码模式】与此漏洞相关的关键代码模式包括使用Velocity模板渲染用户输入，特别是当这些输入在HTML上下文中使用时。关键关键词包括`$escapetool.xml`、`{{velocity}}`、`$xcontext.getUser()`、`$xwiki.getRequestURL()`等。

【修复方法说明】通过在Velocity模板中添加`wiki='false'`属性，禁用Wiki语法和宏解析，从而防止HTML注入。最佳实践是确保所有用户输入在HTML上下文中都经过适当的转义处理。


Instruction:
作为 Java 安全专家，检测此代码中的安全漏洞：
## 内容1
### 文件路径：
com.archimatetool.model/src/com/archimatetool/model/util/ArchimateResourceFactory.java
### 代码内容：
/**
 * This program and the accompanying materials
 * are made available under the terms of the License
 * which accompanies this distribution in the file LICENSE.txt
 */
package com.archimatetool.model.util;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.util.ExtendedMetaData;
import org.eclipse.emf.ecore.xmi.XMLResource;

/**
 * <!-- begin-user-doc -->
 * The <b>Resource Factory</b> associated with the package.
 * <!-- end-user-doc -->
 * @see com.archimatetool.model.util.ArchimateResource
 * @generated
 */
public class ArchimateResourceFactory extends ResourceFactoryImpl {

    /**
     * Creates an instance of the resource factory.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    public ArchimateResourceFactory() {
        super();
    }

    /**
     * @return a Resource that allows saving and loading files with any type of file extension
     *          as registered in plugin.xml
     */
    public static Resource createNewResource(File file) {
        return createNewResource(URI.createFileURI(file.getAbsolutePath()));
    }

    /**
     * @return a Resource that allows saving and loading files with any type of file extension
     *          as registered in plugin.xml
     */
    public static Resource createNewResource(URI uri) {
        // This will return an ArchimateResource as registered in plugin.xml
        ResourceSet resourceSet = createResourceSet();
        return resourceSet.createResource(uri);
    }

    /**
     * @return a ResourceSet that allows saving and loading files with any type of extension
     */
    public static ResourceSet createResourceSet() {
        ResourceSet resourceSet = new ResourceSetImpl();

        /*
         * Register the * extension on the ResourceSet to over-ride the ECore global one
         * This is needed to create an ArchimateModel object from any file (thus pattern "*") without relying on its extension.
         * Without this code it is impossible to load a model from file without extension (error "Class 'model' is not found or is abstract").
         */
        resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new ArchimateResourceFactory());  //$NON-NLS-1$

        return resourceSet;
    }

    /**
     * Creates an instance of the resource.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated NOT
     */
    @Override
    public Resource createResource(URI uri) {
        ArchimateResource resource = new ArchimateResource(uri);

        // Ensure we have ExtendedMetaData for both Saving and Loading
        ExtendedMetaData ext = new ConverterExtendedMetadata();

        resource.getDefaultLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, ext);
        resource.getDefaultSaveOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, ext);

        resource.getDefaultSaveOptions().put(XMLResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$
        resource.getDefaultLoadOptions().put(XMLResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$

        resource.getDefaultLoadOptions().put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, Boolean.TRUE);
        resource.setIntrinsicIDToEObjectMap(new HashMap<String, EObject>());

        Map<String, Object> parserFeatures = new HashMap<String, Object>();
        // Don't allow DTD loading in case of XSS exploits
        parserFeatures.put("http://apache.org/xml/features/disallow-doctype-decl", Boolean.TRUE); //$NON-NLS-1$
        parserFeatures.put("http://apache.org/xml/features/nonvalidating/load-external-dtd", Boolean.FALSE); //$NON-NLS-1$
        parserFeatures.put("http://xml.org/sax/features/external-general-entities", Boolean.FALSE); //$NON-NLS-1$
        parserFeatures.put("http://xml.org/sax/features/external-parameter-entities", Boolean.FALSE); //$NON-NLS-1$
        resource.getDefaultLoadOptions().put(XMLResource.OPTION_PARSER_FEATURES, parserFeatures);

        // Not sure about this
        // resource.getDefaultSaveOptions().put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);

        // Don't set this as it prefixes a hash # to ID references
        // resource.getDefaultLoadOptions().put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE);
        // resource.getDefaultSaveOptions().put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE);

        // Not sure about this
        // resource.getDefaultLoadOptions().put(XMLResource.OPTION_USE_LEXICAL_HANDLER, Boolean.TRUE);

        return resource;
    }

} //ArchimateResourceFactory

Output:
【漏洞类型】资源工厂配置漏洞
【严重性】Medium
【漏洞摘要】原始代码中的`createResourceSet`方法将所有文件扩展名（通过使用通配符"*"）都与`ArchimateResourceFactory`关联起来。这意味着任何未注册的文件扩展名都可以被该资源工厂处理。虽然这种设计初衷是为了允许通过任何文件扩展名来加载和保存模型文件，但它可能无意中允许了不安全的文件类型被加载，从而引入潜在的安全风险，如文件格式不匹配导致的数据损坏或解析错误。这个问题的根本原因在于对文件扩展名的过松限制。
【关键代码模式】
- `resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new ArchimateResourceFactory());`
- `createNewResource(File file)`和`createNewResource(URI uri)`方法
【修复方法说明】修复方法通过在`createResource`中添加`XMLResource.OPTION_USE_PACKAGE_NS_URI_AS_LOCATION`选项并设置为`false`，避免了未注册的URI被加载。这有助于确保只有通过正确注册的扩展名创建的资源才能被处理，从而减少了潜在的安全风险。