cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache CXF Documentation > Maven Integration and Plugin
Date Mon, 24 Aug 2009 14:09:00 GMT
<html>
<head>
    <base href="http://cwiki.apache.org/confluence">
            <link rel="stylesheet" href="/confluence/s/1519/1/1/_/styles/combined.css?spaceKey=CXF20DOC&amp;forWysiwyg=true"
type="text/css">
    </head>
<body style="background-color: white" bgcolor="white">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
     <h2><a href="http://cwiki.apache.org/confluence/display/CXF20DOC/Maven+Integration+and+Plugin">Maven
Integration and Plugin</a></h2>
     <h4>Page <b>edited</b> by             <a href="http://cwiki.apache.org/confluence/display/~mazzag">Glen
Mazza</a>
    </h4>
     Removing old pre-2.0.6 repo information, as the repo seems inactive today.  Override
if I'm incorrect here.
          <div id="versionComment" class="noteMacro" style="display:none; padding: 5px;">
     Removing old pre-2.0.6 repo information, as the repo seems inactive today.  Override
if I'm incorrect here.<br />
     </div>
          <br/>
     <div class="notificationGreySide">
         <h1><a name="MavenIntegrationandPlugin-MavenPOMInformation"></a>Maven
POM Information</h1>

<p>To use CXF within Maven, you'll need to declare the CXF dependencies in your POM.
The CXF groupId is "org.apache.cxf". Here is a small example:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">

<span class="code-tag">&lt;properties&gt;</span>
  <span class="code-tag">&lt;cxf.version&gt;</span>2.2.3<span class="code-tag">&lt;/cxf.version&gt;</span>
<span class="code-tag">&lt;properties&gt;</span>

<span class="code-tag">&lt;dependencies&gt;</span>
	<span class="code-tag">&lt;dependency&gt;</span>
		<span class="code-tag">&lt;groupId&gt;</span>org.apache.cxf<span
class="code-tag">&lt;/groupId&gt;</span>
		<span class="code-tag">&lt;artifactId&gt;</span>cxf-rt-frontend-jaxws<span
class="code-tag">&lt;/artifactId&gt;</span>
		<span class="code-tag">&lt;version&gt;</span>${cxf.version}<span
class="code-tag">&lt;/version&gt;</span>
	<span class="code-tag">&lt;/dependency&gt;</span>
	<span class="code-tag">&lt;dependency&gt;</span>
		<span class="code-tag">&lt;groupId&gt;</span>org.apache.cxf<span
class="code-tag">&lt;/groupId&gt;</span>
		<span class="code-tag">&lt;artifactId&gt;</span>cxf-rt-transports-http<span
class="code-tag">&lt;/artifactId&gt;</span>
		<span class="code-tag">&lt;version&gt;</span>${cxf.version}<span
class="code-tag">&lt;/version&gt;</span>
	<span class="code-tag">&lt;/dependency&gt;</span>
        <span class="code-tag"><span class="code-comment">&lt;!-- Jetty is
needed if you're are not using the CXFServlet --&gt;</span></span>
	<span class="code-tag">&lt;dependency&gt;</span>
		<span class="code-tag">&lt;groupId&gt;</span>org.apache.cxf<span
class="code-tag">&lt;/groupId&gt;</span>
		<span class="code-tag">&lt;artifactId&gt;</span>cxf-rt-transports-http-jetty<span
class="code-tag">&lt;/artifactId&gt;</span>
		<span class="code-tag">&lt;version&gt;</span>${cxf.version}<span
class="code-tag">&lt;/version&gt;</span>
	<span class="code-tag">&lt;/dependency&gt;</span>
<span class="code-tag">&lt;/dependencies&gt;</span>
</pre>
</div></div>

<p>For 2.0.6 and later versions, you don't need to specify any repositories as the artifacts
are available in the central repository. </p>

<p>For information on using Maven with CXF and Tomcat, this <a href="http://www.jroller.com/gmazza/entry/creating_a_wsdl_first_web1"
rel="nofollow">blog entry</a> may be helpful.</p>

<h1><a name="MavenIntegrationandPlugin-MavenPlugin"></a>Maven Plugin</h1>

<h2><a name="MavenIntegrationandPlugin-WSDL2Java"></a>WSDL2Java</h2>

<p>CXF includes a Maven plugin which can generate artifacts from WSDL. Here is a simple
example:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;plugin&gt;</span>
	<span class="code-tag">&lt;groupId&gt;</span>org.apache.cxf<span class="code-tag">&lt;/groupId&gt;</span>
	<span class="code-tag">&lt;artifactId&gt;</span>cxf-codegen-plugin<span
class="code-tag">&lt;/artifactId&gt;</span>
	<span class="code-tag">&lt;version&gt;</span>${cxf.version}<span class="code-tag">&lt;/version&gt;</span>
	<span class="code-tag">&lt;executions&gt;</span>
		<span class="code-tag">&lt;execution&gt;</span>
			<span class="code-tag">&lt;id&gt;</span>generate-sources<span class="code-tag">&lt;/id&gt;</span>
			<span class="code-tag">&lt;phase&gt;</span>generate-sources<span
class="code-tag">&lt;/phase&gt;</span>
			<span class="code-tag">&lt;configuration&gt;</span>
				<span class="code-tag">&lt;sourceRoot&gt;</span>${project.build.directory}/generated/cxf<span
class="code-tag">&lt;/sourceRoot&gt;</span>                             
  
				<span class="code-tag">&lt;wsdlOptions&gt;</span>
					<span class="code-tag">&lt;wsdlOption&gt;</span>
						<span class="code-tag">&lt;wsdl&gt;</span>${basedir}/src/main/wsdl/myService.wsdl<span
class="code-tag">&lt;/wsdl&gt;</span>
					<span class="code-tag">&lt;/wsdlOption&gt;</span>
				<span class="code-tag">&lt;/wsdlOptions&gt;</span>
			<span class="code-tag">&lt;/configuration&gt;</span>
			<span class="code-tag">&lt;goals&gt;</span>
				<span class="code-tag">&lt;goal&gt;</span>wsdl2java<span class="code-tag">&lt;/goal&gt;</span>
			<span class="code-tag">&lt;/goals&gt;</span>
		<span class="code-tag">&lt;/execution&gt;</span>
	<span class="code-tag">&lt;/executions&gt;</span>
<span class="code-tag">&lt;/plugin&gt;</span>
</pre>
</div></div>
<p>In this example we're running the wsdl2java goal in the generate-sources phase. By
running <b>mvn generate-sources</b>, CXF will generate artifacts in the &lt;sourceRoot&gt;
directory that you specify. Each &lt;wsdlOption&gt; element corresponds to a WSDL
that you're generated artifacts for. In the above example we're generating we're specifying
the WSDL location via the &lt;wsdl&gt; option.</p>

<p>Other configuration arguments can be include inside the &lt;wsdlOption&gt;
element. These pass arguments to the tooling and correspond to the options outlined on the
<a href="/confluence/display/CXF20DOC/WSDL+to+Java" title="WSDL to Java">WSDL to Java</a>
page.</p>

<p>For CXF 2.1.4 and latter you don't need anymore to specify the &lt;phase&gt;,
as generate-sources is the default.<br/>
For CXF 2.2 and latter you don't even need to specify the &lt;sourceRoot&gt; to match
maven convention for using target/generated-sources/cxf as output folder for generated classes.</p>

<h3><a name="MavenIntegrationandPlugin-Example1%3APassinginaJAXWSBindingfile"></a>Example
1: Passing in a JAX-WS Binding file</h3>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;configuration&gt;</span>
  <span class="code-tag">&lt;sourceRoot&gt;</span>${basedir}/target/generated/cxf<span
class="code-tag">&lt;/sourceRoot&gt;</span>
  <span class="code-tag">&lt;wsdlOptions&gt;</span>
    <span class="code-tag">&lt;wsdlOption&gt;</span>
      <span class="code-tag">&lt;wsdl&gt;</span>${basedir}/src/main/wsdl/myService.wsdl<span
class="code-tag">&lt;/wsdl&gt;</span>
      <span class="code-tag">&lt;bindingFiles&gt;</span>
        <span class="code-tag">&lt;bindingFile&gt;</span>${basedir}/src/main/resources/wsdl/async_binding.xml<span
class="code-tag">&lt;/bindingFile&gt;</span>
      <span class="code-tag">&lt;/bindingFiles&gt;</span>
    <span class="code-tag">&lt;/wsdlOption&gt;</span>
  <span class="code-tag">&lt;/wsdlOptions&gt;</span>
<span class="code-tag">&lt;/configuration&gt;</span>
</pre>
</div></div>
<p>In this example we're specifying that we want CXF to use our JAX-WS binding file.
Binding files are a way to customize the output of the artifacts that CXF generates. For instance,
it allows you to change the package name CXF uses.</p>

<h3><a name="MavenIntegrationandPlugin-Example2%3ASpecifyingaservicetogenerateartifactsfor"></a>Example
2: Specifying a service to generate artifacts for</h3>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;configuration&gt;</span>
  <span class="code-tag">&lt;sourceRoot&gt;</span>${basedir}/target/generated/src/main/java<span
class="code-tag">&lt;/sourceRoot&gt;</span>
  <span class="code-tag">&lt;wsdlOptions&gt;</span>
    <span class="code-tag">&lt;wsdlOption&gt;</span>
      <span class="code-tag">&lt;wsdl&gt;</span>${basedir}/src/main/wsdl/myService.wsdl<span
class="code-tag">&lt;/wsdl&gt;</span>
      <span class="code-tag">&lt;serviceName&gt;</span>MyWSDLService<span
class="code-tag">&lt;/serviceName&gt;</span>
    <span class="code-tag">&lt;/wsdlOption&gt;</span>
  <span class="code-tag">&lt;/wsdlOptions&gt;</span>
<span class="code-tag">&lt;/configuration&gt;</span>
</pre>
</div></div>
<p>In this example we're specifying that we only want to generate artifacts for the
service named "MyWSDLService" in the WSDL.</p>

<p>To avoid copy/paste in multiple &lt;wsdlOption&gt; you can also declare a
&lt;defaultOption&gt; element.</p>

<h3><a name="MavenIntegrationandPlugin-Example3%3AUsingdefaultOptiontoavoidrepetition"></a>Example
3: Using defaultOption to avoid repetition</h3>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;configuration&gt;</span>
  <span class="code-tag">&lt;sourceRoot&gt;</span>${basedir}/target/generated/cxf<span
class="code-tag">&lt;/sourceRoot&gt;</span>
  <span class="code-tag">&lt;defaultOptions&gt;</span>
      <span class="code-tag">&lt;bindingFiles&gt;</span>
          <span class="code-tag">&lt;bindingFile&gt;</span>${basedir}/src/main/jaxb/bindings.xml<span
class="code-tag">&lt;/bindingFile&gt;</span>
      <span class="code-tag">&lt;/bindingFiles&gt;</span>
      <span class="code-tag">&lt;noAddressBinding&gt;</span>true<span
class="code-tag">&lt;/noAddressBinding&gt;</span>
  <span class="code-tag">&lt;/defaultOptions&gt;</span>
  <span class="code-tag">&lt;wsdlOptions&gt;</span>
      <span class="code-tag">&lt;wsdlOption&gt;</span>
          <span class="code-tag">&lt;wsdl&gt;</span>${basedir}/src/main/wsdl/myService.wsdl<span
class="code-tag">&lt;/wsdl&gt;</span>
          <span class="code-tag">&lt;serviceName&gt;</span>MyWSDLService<span
class="code-tag">&lt;/serviceName&gt;</span>
      <span class="code-tag">&lt;/wsdlOption&gt;</span>
      <span class="code-tag">&lt;wsdlOption&gt;</span>
          <span class="code-tag">&lt;wsdl&gt;</span>${basedir}/src/main/wsdl/myOtherService.wsdl<span
class="code-tag">&lt;/wsdl&gt;</span>
          <span class="code-tag">&lt;serviceName&gt;</span>MyOtherWSDLService<span
class="code-tag">&lt;/serviceName&gt;</span>
      <span class="code-tag">&lt;/wsdlOption&gt;</span>
  <span class="code-tag">&lt;/wsdlOptions&gt;</span>
<span class="code-tag">&lt;/configuration&gt;</span>
</pre>
</div></div>

<p>&lt;defaultOption&gt; and &lt;wsdlOption&gt; correspond to the options
outlined on the <a href="/confluence/display/CXF20DOC/WSDL+to+Java" title="WSDL to Java">WSDL
to Java</a> page, you may look at <a href="http://svn.apache.org/repos/asf/cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/Option.java"
rel="nofollow">http://svn.apache.org/repos/asf/cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/Option.java</a>
for a more detailed description of those parameters.</p>

<p>At least, you can declare a common wsdlRoot folder where you store your WSDL files
and use includes/excludes patterns to select the files to get used by the code generator</p>

<h3><a name="MavenIntegrationandPlugin-Example4%3AUsingwsdlRootwithincludes%2Fexcludespatterns"></a>Example
4: Using wsdlRoot with includes/excludes patterns</h3>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;configuration&gt;</span>
  <span class="code-tag">&lt;sourceRoot&gt;</span>${basedir}/target/generated/cxf<span
class="code-tag">&lt;/sourceRoot&gt;</span>
  <span class="code-tag">&lt;defaultOptions&gt;</span>
      <span class="code-tag">&lt;bindingFiles&gt;</span>
          <span class="code-tag">&lt;bindingFile&gt;</span>${basedir}/src/main/jaxb/bindings.xml<span
class="code-tag">&lt;/bindingFile&gt;</span>
      <span class="code-tag">&lt;/bindingFiles&gt;</span>
      <span class="code-tag">&lt;noAddressBinding&gt;</span>true<span
class="code-tag">&lt;/noAddressBinding&gt;</span>
  <span class="code-tag">&lt;/defaultOptions&gt;</span>
  <span class="code-tag">&lt;wsdlRoot&gt;</span>${basedir}/src/main/resources/wsdl<span
class="code-tag">&lt;/wsdlRoot&gt;</span>
  <span class="code-tag">&lt;includes&gt;</span>
      <span class="code-tag">&lt;include&gt;</span>*Service.wsdl<span
class="code-tag">&lt;/include&gt;</span>
  <span class="code-tag">&lt;/includes&gt;</span>
<span class="code-tag">&lt;/configuration&gt;</span>
</pre>
</div></div>

<p>wsdlRoot default value is <tt>src/main/resources/wsdl</tt> so you may
omit this declaration.</p>

<h2><a name="MavenIntegrationandPlugin-Java2WSDL%28CXF2.0.xonly.Removedin2.1andreplacedwithJava2WS.%29"></a>Java2WSDL
 (CXF 2.0.x only.  Removed in 2.1 and replaced with Java2WS.)</h2>

<p>CXF also includes a Maven plugin which can generate WSDL from Java code. Here is
a simple example:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;plugin&gt;</span>
  <span class="code-tag">&lt;groupId&gt;</span>org.apache.cxf<span
class="code-tag">&lt;/groupId&gt;</span>
  <span class="code-tag">&lt;artifactId&gt;</span>cxf-codegen-plugin<span
class="code-tag">&lt;/artifactId&gt;</span>
  <span class="code-tag">&lt;version&gt;</span>2.0.9<span class="code-tag">&lt;/version&gt;</span>
  <span class="code-tag">&lt;dependencies&gt;</span>
    <span class="code-tag">&lt;dependency&gt;</span>
      <span class="code-tag">&lt;groupId&gt;</span>org.apache.cxf<span
class="code-tag">&lt;/groupId&gt;</span>
      <span class="code-tag">&lt;artifactId&gt;</span>cxf-rt-frontend-jaxws<span
class="code-tag">&lt;/artifactId&gt;</span>
      <span class="code-tag">&lt;version&gt;</span>2.0.9<span class="code-tag">&lt;/version&gt;</span>
    <span class="code-tag">&lt;/dependency&gt;</span>
  <span class="code-tag">&lt;/dependencies&gt;</span>
  <span class="code-tag">&lt;executions&gt;</span>
    <span class="code-tag">&lt;execution&gt;</span>
      <span class="code-tag">&lt;id&gt;</span>generate-wsdl<span class="code-tag">&lt;/id&gt;</span>
      <span class="code-tag">&lt;phase&gt;</span>process-classes<span
class="code-tag">&lt;/phase&gt;</span>
      <span class="code-tag">&lt;configuration&gt;</span>
        <span class="code-tag">&lt;className&gt;</span>org.example.MyService<span
class="code-tag">&lt;/className&gt;</span>
      <span class="code-tag">&lt;/configuration&gt;</span>
      <span class="code-tag">&lt;goals&gt;</span>
        <span class="code-tag">&lt;goal&gt;</span>java2wsdl<span class="code-tag">&lt;/goal&gt;</span>
      <span class="code-tag">&lt;/goals&gt;</span>
    <span class="code-tag">&lt;/execution&gt;</span>
  <span class="code-tag">&lt;/executions&gt;</span>
<span class="code-tag">&lt;/plugin&gt;</span>
</pre>
</div></div>
<p>Here are the options you can use:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
&lt;configuration&gt;
   &lt;className&gt;...&lt;/className&gt;
   &lt;classpath&gt;...&lt;/classpath&gt;
   &lt;outputFile&gt;...&lt;/outputFile&gt;
   &lt;serviceName&gt;...&lt;/serviceName&gt;
   &lt;soap12&gt;...&lt;/soap12&gt;
   &lt;targetNameSpace&gt;...&lt;/targetNameSpace&gt;
   &lt;verbose&gt;...&lt;/verbose&gt;
   &lt;quiet&gt;...&lt;/quiet&gt;
&lt;/configuration&gt;
</pre>
</div></div>

<h2><a name="MavenIntegrationandPlugin-Java2WS"></a>Java2WS</h2>

<p>This plugin can generate WSDL, server side code used to start web service and client
side code from<br/>
a java class.<br/>
Here is a simple example:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;plugin&gt;</span>
	<span class="code-tag">&lt;groupId&gt;</span>org.apache.cxf<span class="code-tag">&lt;/groupId&gt;</span>
	<span class="code-tag">&lt;artifactId&gt;</span>cxf-java2ws-plugin<span
class="code-tag">&lt;/artifactId&gt;</span>
	<span class="code-tag">&lt;version&gt;</span>2.1.3<span class="code-tag">&lt;/version&gt;</span>
	<span class="code-tag">&lt;dependencies&gt;</span>
		<span class="code-tag">&lt;dependency&gt;</span>
			<span class="code-tag">&lt;groupId&gt;</span>org.apache.cxf<span
class="code-tag">&lt;/groupId&gt;</span>
			<span class="code-tag">&lt;artifactId&gt;</span>cxf-rt-frontend-jaxws<span
class="code-tag">&lt;/artifactId&gt;</span>
			<span class="code-tag">&lt;version&gt;</span>2.1.3<span class="code-tag">&lt;/version&gt;</span>
		<span class="code-tag">&lt;/dependency&gt;</span>
		<span class="code-tag">&lt;dependency&gt;</span>
			<span class="code-tag">&lt;groupId&gt;</span>org.apache.cxf<span
class="code-tag">&lt;/groupId&gt;</span>
			<span class="code-tag">&lt;artifactId&gt;</span>cxf-rt-frontend-simple<span
class="code-tag">&lt;/artifactId&gt;</span>
			<span class="code-tag">&lt;version&gt;</span>2.1.3<span class="code-tag">&lt;/version&gt;</span>
		<span class="code-tag">&lt;/dependency&gt;</span>
	<span class="code-tag">&lt;/dependencies&gt;</span>

	<span class="code-tag">&lt;executions&gt;</span>
		<span class="code-tag">&lt;execution&gt;</span>
			<span class="code-tag">&lt;id&gt;</span>process-classes<span class="code-tag">&lt;/id&gt;</span>
			<span class="code-tag">&lt;phase&gt;</span>process-classes<span
class="code-tag">&lt;/phase&gt;</span>
			<span class="code-tag">&lt;configuration&gt;</span>
				<span class="code-tag">&lt;className&gt;</span>org.apache.hello_world.Greeter<span
class="code-tag">&lt;/className&gt;</span>
				<span class="code-tag">&lt;genWsdl&gt;</span>true<span class="code-tag">&lt;/genWsdl&gt;</span>
				<span class="code-tag">&lt;verbose&gt;</span>true<span class="code-tag">&lt;/verbose&gt;</span>
			<span class="code-tag">&lt;/configuration&gt;</span>
			<span class="code-tag">&lt;goals&gt;</span>
				<span class="code-tag">&lt;goal&gt;</span>java2ws<span class="code-tag">&lt;/goal&gt;</span>
			<span class="code-tag">&lt;/goals&gt;</span>
		<span class="code-tag">&lt;/execution&gt;</span>
	<span class="code-tag">&lt;/executions&gt;</span>
<span class="code-tag">&lt;/plugin&gt;</span>
</pre>
</div></div>
<p>Here are the options you can use:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
&lt;configuration&gt;
   &lt;className&gt;...&lt;/className&gt;
   &lt;classpath&gt;...&lt;/classpath&gt;
   &lt;outputFile&gt;...&lt;/outputFile&gt;
   &lt;genWsdl&gt;..&lt;/genWsdl&gt;
   &lt;genServer&gt;..&lt;/genServer&gt;
   &lt;genClient&gt;..&lt;/genClient&gt;
   &lt;genWrapperbean&gt;..&lt;/genWrapperbean&gt;
   &lt;frontend&gt;...&lt;/frontend&gt;
   &lt;databinding&gt;...&lt;/databinding&gt;
   &lt;serviceName&gt;...&lt;/serviceName&gt;
   &lt;soap12&gt;...&lt;/soap12&gt;
   &lt;targetNameSpace&gt;...&lt;/targetNameSpace&gt;
   &lt;verbose&gt;...&lt;/verbose&gt;
   &lt;quiet&gt;...&lt;/quiet&gt;
&lt;/configuration&gt;
</pre>
</div></div>
<p>The outputFile value by default will be:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
{project.build.directory}/generated/wsdl/{className}.wsdl
</pre>
</div></div>
<p>Refer to this link <a href="http://cwiki.apache.org/CXF20DOC/java-to-ws.html"
rel="nofollow">http://cwiki.apache.org/CXF20DOC/java-to-ws.html</a> for other options
detailed usage.</p>
     </div>
     <div id="commentsSection" class="wiki-content pageSection">
       <div style="float: right;">
            <a href="http://cwiki.apache.org/confluence/users/viewnotifications.action"
class="grey">Change Notification Preferences</a>
       </div>

       <a href="http://cwiki.apache.org/confluence/display/CXF20DOC/Maven+Integration+and+Plugin">View
Online</a>
       |
       <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=49555&revisedVersion=23&originalVersion=22">View
Change</a>
              |
       <a href="http://cwiki.apache.org/confluence/display/CXF20DOC/Maven+Integration+and+Plugin?showComments=true&amp;showCommentArea=true#addcomment">Add
Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>

Mime
View raw message