- 浏览: 337095 次
- 性别:
- 来自: 厦门
文章分类
最新评论
-
弦月001:
我目前也是碰到这样的情况,在jsp里面没有问题,但在free ...
Spring+Freemarker(国际化) -
laj12347:
zhangsw_00 写道我参照你的方法,配置环境,在jsp文 ...
Spring+Freemarker(国际化) -
yctan:
hi,能不能把发送邮件的代码也贴一下啊。
用webdav协议访问exchange邮件服务器,下载附件的问题 -
maketc:
楼上正解,这个问题也被郁闷了半天,试过重启tomcat、ecl ...
Tomcat 部署 Could not copy all resources to 或者Undeployment Failure could not be re -
masuweng:
楼上正解,这个问题曾被郁闷了半天
Tomcat 部署 Could not copy all resources to 或者Undeployment Failure could not be re
前几天用webdav 访问exchange邮件服务器,一般的操作都完成,可是要下载邮件的附件就没有相关的方法或类来完成操作,在网上找了很久也没找到,后来自己看了看源码,自己从新继承写了下,就可以完成从exchange上下载附件的功能。发上来有能用上提供的帮助,大家也可以有机会讨论。
webdav.java
/**
* Created by IntelliJ IDEA.
* User: zkx
* Date: 2006-8-14
* Time: 9:34:29
* To change this template use File | Settings | File Templates.
*/
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpURL;
import org.apache.commons.httpclient.NTCredentials;
import org.apache.commons.httpclient.HttpClient;
import org.apache.webdav.lib.Property;
import org.apache.webdav.lib.ResponseEntity;
import org.apache.webdav.lib.WebdavResource;
import org.apache.webdav.lib.methods.DepthSupport;
import org.apache.webdav.lib.methods.PropFindMethod;
import org.apache.webdav.lib.methods.attFindMethod;
import org.w3c.dom.NodeList;
import java.util.Vector;
import java.io.IOException;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.net.MalformedURLException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class webdav {
public static String userName="5";
public static String password="5";
public static String hostAdd="192.168.1.45";
public static String domain ="local";
public static String inbox = "http://192.168.1.45/exchange/5/Inbox/";
public static Vector properties;
static {
properties = new Vector();
properties.addElement("DAV:autoversion");
properties.addElement("DAV:contentclass");
properties.addElement("DAV:creationdate");
properties.addElement("DAV:displayname");
properties.addElement("DAV:getcontentlength");
properties.addElement("DAV:getcontenttype");
properties.addElement("DAV:getetag");
properties.addElement("DAV:getlastmodified");
properties.addElement("DAV:href");
properties.addElement("DAV:id");
properties.addElement("DAV:iscollection");
properties.addElement("DAV:isfolder");
properties.addElement("DAV:ishidden");
properties.addElement("DAV:isreadonly");
properties.addElement("DAV:isstructureddocument");
properties.addElement("DAV:isversioned");
properties.addElement("DAV:lockdiscovery");
properties.addElement("DAV:parentname");
properties.addElement("DAV:resourcetype");
properties.addElement("DAV:revisionid");
properties.addElement("DAV:revisionlabel");
properties.addElement("DAV:revisionuri");
properties.addElement("DAV:supportedlock");
properties.addElement("DAV:uid");
properties.addElement("DAV:resourcetype");
properties.addElement("DAV:vresourceid");
properties.addElement("urn:schemas:httpmail:date");
properties.addElement("urn:schemas:httpmail:datereceived");
properties.addElement("urn:schemas:httpmail:displaycc");
properties.addElement("urn:schemas:httpmail:displayto");
properties.addElement("urn:schemas:httpmail:from");
properties.addElement("urn:schemas:httpmail:fromemail");
properties.addElement("urn:schemas:httpmail:fromname");
properties.addElement("urn:schemas:httpmail:hasattachment");
properties.addElement("urn:schemas:httpmail:htmldescription");
properties.addElement("urn:schemas:httpmail:importance");
properties.addElement("urn:schemas:httpmail:normalizedsubject");
properties.addElement("urn:schemas:httpmail:read");
properties.addElement("urn:schemas:httpmail:sendername");
properties.addElement("urn:schemas:httpmail:subject");
properties.addElement("urn:schemas:httpmail:submitted");
properties.addElement("urn:schemas:httpmail:textdescription");
properties.addElement("urn:schemas:httpmail:thread-topic");
properties.addElement("urn:schemas:httpmail:to");
properties.addElement("urn:schemas:mailheader:content-class");
properties.addElement("urn:schemas:mailheader:date");
properties.addElement("urn:schemas:mailheader:from");
properties.addElement("urn:schemas:mailheader:message-id");
properties.addElement("urn:schemas:mailheader:received");
properties.addElement("urn:schemas:mailheader:subject");
properties.addElement("urn:schemas:mailheader:thread-index");
properties.addElement("urn:schemas:mailheader:thread-topic");
properties.addElement("urn:schemas:mailheader:to");
properties.addElement("urn:schemas:mailheader:xref");
properties.addElement("urn:schemas:mailheader:x-unsent");
properties.addElement("urn:schemas:mailheader:x-mailer");
properties.addElement("x-mimeole");
properties.addElement("urn:schemas:mailheader:x-catchall");
properties.addElement("urn:schemas:mailheader:x-ms-has-attach");
properties.addElement("urn:schemas:mailheader:content-disposition");
}
public static void main(String args[])
{
try{
NTCredentials creds = new NTCredentials(userName, password, hostAdd,domain);
HttpURL host = new HttpURL(inbox);
SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS");
Date beginDate = new Date();
System.out.println("beginDate="+bartDateFormat.format(beginDate));
WebdavResource wdr = new WebdavResource(host,creds, WebdavResource.ALL, DepthSupport.DEPTH_INFINITY);
Date endDate = new Date();
System.out.println("endDate="+bartDateFormat.format(endDate));
HttpClient client=wdr.retrieveSessionInstance();
PropFindMethod method = new PropFindMethod(inbox,Integer.MAX_VALUE,properties.elements());
int status = client.executeMethod(method);
java.util.Enumeration responses = method.getResponses();
Date processDate = new Date();
System.out.println("processDate="+bartDateFormat.format(processDate));
while (responses.hasMoreElements()){
ResponseEntity response = (ResponseEntity)responses.nextElement();
java.util.Enumeration properties1 = response.getProperties();
String mailName="";
while (properties1.hasMoreElements()) {
Property property = (Property)properties1.nextElement();
System.out.println("name="+property.getName() + " type ="+ property.getLocalName() + " = content value= " + property.getPropertyAsString() +"=status code="+ property.getStatusCode());
if(property.getLocalName().equals("displayname") )
{
mailName=property.getPropertyAsString();
System.out.println("mailName="+mailName);
}
if(property.getLocalName().equals("hasattachment")&&property.getPropertyAsString().equals("1") )
{
System.out.println("attachment="+inbox+mailName);
fetchAttachment(inbox+mailName);
}
}
System.out.println("--------------------------------------------------------");
}
}catch(MalformedURLException mue)
{
mue.printStackTrace();
}
catch(HttpException he)
{
he.printStackTrace();
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
}
protected static void fetchAttachment(String attPath) throws Exception
{
System.out.println("attPath="+attPath);
try
{
NTCredentials creds = new NTCredentials(userName, password, hostAdd,domain);
HttpURL host = new HttpURL(attPath);
WebdavResource wdr = new WebdavResource(host,creds, WebdavResource.ALL, DepthSupport.DEPTH_0);
org.apache.commons.httpclient.HttpClient client=wdr.retrieveSessionInstance();
java.util.Vector vproperties= new java.util.Vector();
vproperties.addElement("urn:schemas:httpmail:attachmentfilename");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x0E210003");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x3716001F");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x37140003");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x3713001F");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x370E001F");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x370B0003");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x37050003");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x3704001F");
attFindMethod method = new attFindMethod(attPath,Integer.MAX_VALUE,vproperties.elements());
int status = client.executeMethod(method);
java.util.Enumeration responses = method.getResponses();
System.out.println("============================================");
while (responses.hasMoreElements()){
ResponseEntity response = (ResponseEntity)responses.nextElement();
java.util.Enumeration properties1 = response.getProperties();
while (properties1.hasMoreElements()) {
Property property = (Property)properties1.nextElement();
System.out.println("name="+property.getName() + " type ="+ property.getLocalName() + " = content value= " + property.getPropertyAsString() +"=status code="+ property.getStatusCode());
String attName="";
if(property.getLocalName().equals("attachmentfilename"))
{
attName = property.getPropertyAsString();
NTCredentials creds1 = new NTCredentials(userName, password, hostAdd,domain);
HttpURL host1 = new HttpURL(attPath+"/"+attName);
WebdavResource wdr1 = new WebdavResource(host1,creds1, WebdavResource.ALL, DepthSupport.DEPTH_0);
File f= new File(attName);
boolean bool=wdr1.getMethod(f) ;
System.out.println("bool="+bool);
}
}
}
System.out.println("============================================");
}
catch(MalformedURLException mue)
{
mue.printStackTrace();
}
catch(HttpException he)
{
he.printStackTrace();
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
attFindMethod.java
/*
* $Header: /home/cvs/jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib/methods/PropFindMethod.java,v 1.7 2004/08/02 15:45:48 unico Exp $
* $Revision: 1.7 $
* $Date: 2004/08/02 15:45:48 $
*
* ====================================================================
*
* Copyright 1999-2002 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.webdav.lib.methods;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Vector;
import org.apache.commons.httpclient.HttpConnection;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpState;
import org.apache.webdav.lib.PropertyName;
import org.apache.webdav.lib.util.XMLPrinter;
/**
* This class implements the WebDAV PROPFIND Method.
*
* <P> The PROPFIND method retrieves properties defined on the resource
* identified by the Request-URI, if the resource does not have any internal
* members, or on the resource identified by the Request-URI and potentially
* its member resources, if the resource is a collection that has internal
* member URIs.
*
* <P> A typical request looks like this:
*
* <PRE>
*
* PROPFIND /file HTTP/1.1
* Host: www.foo.bar
* Content-type: text/xml; charset="utf-8"
* Content-Length: xxxx
*
* <?xml version="1.0" encoding="utf-8" ?>
* <D:propfind xmlns:D="DAV:">
* <D:prop xmlns:R="http://www.foo.bar/boxschema/">
* <R:bigbox/>
* <R:author/>
* <R:DingALing/>
* <R:Random/>
* </D:prop>
* </D:propfind>
* </PRE>
*
*/
public class attFindMethod extends XMLResponseMethodBase
implements DepthSupport {
// -------------------------------------------------------------- Constants
/**
* Request of named properties.
*/
public static final int BY_NAME = 0;
/**
* Request of all properties name and value.
*/
public static final int ALL = 1;
/**
* Request of all properties name.
*/
public static final int NAMES = 2;
// ----------------------------------------------------------- Constructors
/**
* Method constructor.
*/
public attFindMethod() {
}
/**
* Method constructor.
*/
public attFindMethod(String path) {
super(path);
}
/**
* Method constructor.
*/
public attFindMethod(String path, int depth) {
this(path);
setDepth(depth);
}
/**
* Method constructor.
*/
public attFindMethod(String path, int depth, int type) {
this(path);
setDepth(depth);
setType(type);
}
/**
* Method constructor.
*/
public attFindMethod(String path, Enumeration propertyNames) {
this(path);
setDepth(1);
setPropertyNames(propertyNames);
setType(BY_NAME);
}
/**
* Method constructor.
*/
public attFindMethod(String path, int depth, Enumeration propertyNames) {
this(path);
setDepth(depth);
setPropertyNames(propertyNames);
setType(BY_NAME);
}
// ----------------------------------------------------- Instance Variables
/**
* Type of the Propfind.
*/
protected int type = ALL;
/**
* Property name list.
*/
protected PropertyName[] propertyNames;
/**
* Depth.
*/
protected int depth = DEPTH_INFINITY;
/**
* The namespace abbreviation that prefixes DAV tags
*/
protected String prefix = null;
// ------------------------------------------------------------- Properties
/**
* Set a request header value, redirecting the special case of the "Depth" header
* to invoke {@link #setDepth} instead.
*
* @param headerName Header name
* @param headerValue Header value
*/
public void setRequestHeader(String headerName, String headerValue) {
if (headerName.equalsIgnoreCase("Depth")){
int depth = -1;
if (headerValue.equals("0")){
depth = DEPTH_0;
}
else if (headerValue.equals("1")){
depth = DEPTH_1;
}
else if (headerValue.equalsIgnoreCase("infinity")){
depth = DEPTH_INFINITY;
}
setDepth(depth);
}
else{
super.setRequestHeader(headerName, headerValue);
}
}
/**
* Type setter.
*
* @param type New type value
*/
public void setType(int type) {
checkNotUsed();
this.type = type;
}
/**
* Type getter.
*
* @return int type value
*/
public int getType() {
return type;
}
/**
* Depth setter.
*
* @param depth New depth value
*/
public void setDepth(int depth) {
checkNotUsed();
this.depth = depth;
}
/**
* Depth getter.
*
* @return int depth value
*/
public int getDepth() {
return depth;
}
/**
* Property names setter.
* The enumeration may contain strings with or without a namespace prefix
* but the preferred way is to provide PropertyName objects.
*
* @param propertyNames List of the property names
*/
public void setPropertyNames(Enumeration propertyNames) {
checkNotUsed();
Vector list = new Vector();
while (propertyNames.hasMoreElements()) {
Object item = propertyNames.nextElement();
if (item instanceof PropertyName)
{
list.add(item);
}
else if (item instanceof String)
{
String propertyName = (String) item;
int length = propertyName.length();
boolean found = false;
int i = 1;
while (!found && (i <= length)) {
char chr = propertyName.charAt(length - i);
if (!Character.isUnicodeIdentifierPart(chr)
&& chr!='-' && chr!='_' && chr!='.') {
found = true;
} else {
i++;
}
}
if ((i == 1) || (i >= length)) {
list.add(new PropertyName("DAV:",propertyName));
} else {
String namespace = propertyName.substring(0, length + 1 - i);
String localName = propertyName.substring(length + 1 - i);
list.add(new PropertyName(namespace,localName));
}
}
else
{
// unknown type
// ignore
}
}
this.propertyNames = (PropertyName[])list.toArray(new PropertyName[list.size()]);
}
// --------------------------------------------------- WebdavMethod Methods
public void recycle() {
super.recycle();
prefix = null;
}
public String getName() {
return "X-MS-ENUMATTS";
}
/**
* Generate additional headers needed by the request.
*
* @param state State token
* @param conn The connection being used to make the request.
*/
public void addRequestHeaders(HttpState state, HttpConnection conn)
throws IOException, HttpException {
// set the default utf-8 encoding, if not already present
if (getRequestHeader("Content-Type") == null ) super.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
super.addRequestHeaders(state, conn);
switch (depth) {
case DEPTH_0:
super.setRequestHeader("Depth", "0");
break;
case DEPTH_1:
super.setRequestHeader("Depth", "1");
break;
case DEPTH_INFINITY:
super.setRequestHeader("Depth", "infinity");
break;
}
}
/**
* DAV requests that contain a body must override this function to
* generate that body.
*
* <p>The default behavior simply returns an empty body.</p>
*/
public String generateRequestBody() {
XMLPrinter printer = new XMLPrinter();
printer.writeXMLHeader();
printer.writeElement("D", "DAV:", "PROPFIND",
XMLPrinter.OPENING);
switch (type) {
case ALL:
printer.writeElement("D", "allprop", XMLPrinter.NO_CONTENT);
break;
case NAMES:
printer.writeElement("D", "propname", XMLPrinter.NO_CONTENT);
break;
case BY_NAME:
printer.writeElement("D", "prop", XMLPrinter.OPENING);
for (int i=0 ; i<propertyNames.length ; i++)
{
String namespace = propertyNames[i].getNamespaceURI();
String localname = propertyNames[i].getLocalName();
if ("DAV:".equals(namespace)) {
printer.writeElement("D", localname, XMLPrinter.NO_CONTENT);
} else {
if (namespace.length() > 0) {
printer.writeElement("ZZ", namespace, localname,
XMLPrinter.NO_CONTENT);
} else {
printer.writeElement(null, null, localname,
XMLPrinter.NO_CONTENT);
}
}
}
printer.writeElement("D", "prop", XMLPrinter.CLOSING);
break;
}
printer.writeElement("D", "PROPFIND", XMLPrinter.CLOSING);
return printer.toString();
}
/**
* This method returns an enumeration of URL paths. If the attFindMethod
* was sent to the URL of a collection, then there will be multiple URLs.
* The URLs are picked out of the <code><D:href></code> elements
* of the response.
*
* @return an enumeration of URL paths as Strings
*/
public Enumeration getAllResponseURLs() {
checkUsed();
return getResponseURLs().elements();
}
/**
* Returns an enumeration of <code>Property</code> objects.
*/
public Enumeration getResponseProperties(String urlPath) {
checkUsed();
Response response = (Response) getResponseHashtable().get(urlPath);
if (response != null) {
return response.getProperties();
} else {
return (new Vector()).elements();
}
}
}
webdav.java
/**
* Created by IntelliJ IDEA.
* User: zkx
* Date: 2006-8-14
* Time: 9:34:29
* To change this template use File | Settings | File Templates.
*/
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpURL;
import org.apache.commons.httpclient.NTCredentials;
import org.apache.commons.httpclient.HttpClient;
import org.apache.webdav.lib.Property;
import org.apache.webdav.lib.ResponseEntity;
import org.apache.webdav.lib.WebdavResource;
import org.apache.webdav.lib.methods.DepthSupport;
import org.apache.webdav.lib.methods.PropFindMethod;
import org.apache.webdav.lib.methods.attFindMethod;
import org.w3c.dom.NodeList;
import java.util.Vector;
import java.io.IOException;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.net.MalformedURLException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class webdav {
public static String userName="5";
public static String password="5";
public static String hostAdd="192.168.1.45";
public static String domain ="local";
public static String inbox = "http://192.168.1.45/exchange/5/Inbox/";
public static Vector properties;
static {
properties = new Vector();
properties.addElement("DAV:autoversion");
properties.addElement("DAV:contentclass");
properties.addElement("DAV:creationdate");
properties.addElement("DAV:displayname");
properties.addElement("DAV:getcontentlength");
properties.addElement("DAV:getcontenttype");
properties.addElement("DAV:getetag");
properties.addElement("DAV:getlastmodified");
properties.addElement("DAV:href");
properties.addElement("DAV:id");
properties.addElement("DAV:iscollection");
properties.addElement("DAV:isfolder");
properties.addElement("DAV:ishidden");
properties.addElement("DAV:isreadonly");
properties.addElement("DAV:isstructureddocument");
properties.addElement("DAV:isversioned");
properties.addElement("DAV:lockdiscovery");
properties.addElement("DAV:parentname");
properties.addElement("DAV:resourcetype");
properties.addElement("DAV:revisionid");
properties.addElement("DAV:revisionlabel");
properties.addElement("DAV:revisionuri");
properties.addElement("DAV:supportedlock");
properties.addElement("DAV:uid");
properties.addElement("DAV:resourcetype");
properties.addElement("DAV:vresourceid");
properties.addElement("urn:schemas:httpmail:date");
properties.addElement("urn:schemas:httpmail:datereceived");
properties.addElement("urn:schemas:httpmail:displaycc");
properties.addElement("urn:schemas:httpmail:displayto");
properties.addElement("urn:schemas:httpmail:from");
properties.addElement("urn:schemas:httpmail:fromemail");
properties.addElement("urn:schemas:httpmail:fromname");
properties.addElement("urn:schemas:httpmail:hasattachment");
properties.addElement("urn:schemas:httpmail:htmldescription");
properties.addElement("urn:schemas:httpmail:importance");
properties.addElement("urn:schemas:httpmail:normalizedsubject");
properties.addElement("urn:schemas:httpmail:read");
properties.addElement("urn:schemas:httpmail:sendername");
properties.addElement("urn:schemas:httpmail:subject");
properties.addElement("urn:schemas:httpmail:submitted");
properties.addElement("urn:schemas:httpmail:textdescription");
properties.addElement("urn:schemas:httpmail:thread-topic");
properties.addElement("urn:schemas:httpmail:to");
properties.addElement("urn:schemas:mailheader:content-class");
properties.addElement("urn:schemas:mailheader:date");
properties.addElement("urn:schemas:mailheader:from");
properties.addElement("urn:schemas:mailheader:message-id");
properties.addElement("urn:schemas:mailheader:received");
properties.addElement("urn:schemas:mailheader:subject");
properties.addElement("urn:schemas:mailheader:thread-index");
properties.addElement("urn:schemas:mailheader:thread-topic");
properties.addElement("urn:schemas:mailheader:to");
properties.addElement("urn:schemas:mailheader:xref");
properties.addElement("urn:schemas:mailheader:x-unsent");
properties.addElement("urn:schemas:mailheader:x-mailer");
properties.addElement("x-mimeole");
properties.addElement("urn:schemas:mailheader:x-catchall");
properties.addElement("urn:schemas:mailheader:x-ms-has-attach");
properties.addElement("urn:schemas:mailheader:content-disposition");
}
public static void main(String args[])
{
try{
NTCredentials creds = new NTCredentials(userName, password, hostAdd,domain);
HttpURL host = new HttpURL(inbox);
SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS");
Date beginDate = new Date();
System.out.println("beginDate="+bartDateFormat.format(beginDate));
WebdavResource wdr = new WebdavResource(host,creds, WebdavResource.ALL, DepthSupport.DEPTH_INFINITY);
Date endDate = new Date();
System.out.println("endDate="+bartDateFormat.format(endDate));
HttpClient client=wdr.retrieveSessionInstance();
PropFindMethod method = new PropFindMethod(inbox,Integer.MAX_VALUE,properties.elements());
int status = client.executeMethod(method);
java.util.Enumeration responses = method.getResponses();
Date processDate = new Date();
System.out.println("processDate="+bartDateFormat.format(processDate));
while (responses.hasMoreElements()){
ResponseEntity response = (ResponseEntity)responses.nextElement();
java.util.Enumeration properties1 = response.getProperties();
String mailName="";
while (properties1.hasMoreElements()) {
Property property = (Property)properties1.nextElement();
System.out.println("name="+property.getName() + " type ="+ property.getLocalName() + " = content value= " + property.getPropertyAsString() +"=status code="+ property.getStatusCode());
if(property.getLocalName().equals("displayname") )
{
mailName=property.getPropertyAsString();
System.out.println("mailName="+mailName);
}
if(property.getLocalName().equals("hasattachment")&&property.getPropertyAsString().equals("1") )
{
System.out.println("attachment="+inbox+mailName);
fetchAttachment(inbox+mailName);
}
}
System.out.println("--------------------------------------------------------");
}
}catch(MalformedURLException mue)
{
mue.printStackTrace();
}
catch(HttpException he)
{
he.printStackTrace();
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
}
protected static void fetchAttachment(String attPath) throws Exception
{
System.out.println("attPath="+attPath);
try
{
NTCredentials creds = new NTCredentials(userName, password, hostAdd,domain);
HttpURL host = new HttpURL(attPath);
WebdavResource wdr = new WebdavResource(host,creds, WebdavResource.ALL, DepthSupport.DEPTH_0);
org.apache.commons.httpclient.HttpClient client=wdr.retrieveSessionInstance();
java.util.Vector vproperties= new java.util.Vector();
vproperties.addElement("urn:schemas:httpmail:attachmentfilename");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x0E210003");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x3716001F");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x37140003");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x3713001F");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x370E001F");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x370B0003");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x37050003");
vproperties.addElement("http://schemas.microsoft.com/mapi/proptag/x3704001F");
attFindMethod method = new attFindMethod(attPath,Integer.MAX_VALUE,vproperties.elements());
int status = client.executeMethod(method);
java.util.Enumeration responses = method.getResponses();
System.out.println("============================================");
while (responses.hasMoreElements()){
ResponseEntity response = (ResponseEntity)responses.nextElement();
java.util.Enumeration properties1 = response.getProperties();
while (properties1.hasMoreElements()) {
Property property = (Property)properties1.nextElement();
System.out.println("name="+property.getName() + " type ="+ property.getLocalName() + " = content value= " + property.getPropertyAsString() +"=status code="+ property.getStatusCode());
String attName="";
if(property.getLocalName().equals("attachmentfilename"))
{
attName = property.getPropertyAsString();
NTCredentials creds1 = new NTCredentials(userName, password, hostAdd,domain);
HttpURL host1 = new HttpURL(attPath+"/"+attName);
WebdavResource wdr1 = new WebdavResource(host1,creds1, WebdavResource.ALL, DepthSupport.DEPTH_0);
File f= new File(attName);
boolean bool=wdr1.getMethod(f) ;
System.out.println("bool="+bool);
}
}
}
System.out.println("============================================");
}
catch(MalformedURLException mue)
{
mue.printStackTrace();
}
catch(HttpException he)
{
he.printStackTrace();
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
attFindMethod.java
/*
* $Header: /home/cvs/jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib/methods/PropFindMethod.java,v 1.7 2004/08/02 15:45:48 unico Exp $
* $Revision: 1.7 $
* $Date: 2004/08/02 15:45:48 $
*
* ====================================================================
*
* Copyright 1999-2002 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.webdav.lib.methods;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Vector;
import org.apache.commons.httpclient.HttpConnection;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpState;
import org.apache.webdav.lib.PropertyName;
import org.apache.webdav.lib.util.XMLPrinter;
/**
* This class implements the WebDAV PROPFIND Method.
*
* <P> The PROPFIND method retrieves properties defined on the resource
* identified by the Request-URI, if the resource does not have any internal
* members, or on the resource identified by the Request-URI and potentially
* its member resources, if the resource is a collection that has internal
* member URIs.
*
* <P> A typical request looks like this:
*
* <PRE>
*
* PROPFIND /file HTTP/1.1
* Host: www.foo.bar
* Content-type: text/xml; charset="utf-8"
* Content-Length: xxxx
*
* <?xml version="1.0" encoding="utf-8" ?>
* <D:propfind xmlns:D="DAV:">
* <D:prop xmlns:R="http://www.foo.bar/boxschema/">
* <R:bigbox/>
* <R:author/>
* <R:DingALing/>
* <R:Random/>
* </D:prop>
* </D:propfind>
* </PRE>
*
*/
public class attFindMethod extends XMLResponseMethodBase
implements DepthSupport {
// -------------------------------------------------------------- Constants
/**
* Request of named properties.
*/
public static final int BY_NAME = 0;
/**
* Request of all properties name and value.
*/
public static final int ALL = 1;
/**
* Request of all properties name.
*/
public static final int NAMES = 2;
// ----------------------------------------------------------- Constructors
/**
* Method constructor.
*/
public attFindMethod() {
}
/**
* Method constructor.
*/
public attFindMethod(String path) {
super(path);
}
/**
* Method constructor.
*/
public attFindMethod(String path, int depth) {
this(path);
setDepth(depth);
}
/**
* Method constructor.
*/
public attFindMethod(String path, int depth, int type) {
this(path);
setDepth(depth);
setType(type);
}
/**
* Method constructor.
*/
public attFindMethod(String path, Enumeration propertyNames) {
this(path);
setDepth(1);
setPropertyNames(propertyNames);
setType(BY_NAME);
}
/**
* Method constructor.
*/
public attFindMethod(String path, int depth, Enumeration propertyNames) {
this(path);
setDepth(depth);
setPropertyNames(propertyNames);
setType(BY_NAME);
}
// ----------------------------------------------------- Instance Variables
/**
* Type of the Propfind.
*/
protected int type = ALL;
/**
* Property name list.
*/
protected PropertyName[] propertyNames;
/**
* Depth.
*/
protected int depth = DEPTH_INFINITY;
/**
* The namespace abbreviation that prefixes DAV tags
*/
protected String prefix = null;
// ------------------------------------------------------------- Properties
/**
* Set a request header value, redirecting the special case of the "Depth" header
* to invoke {@link #setDepth} instead.
*
* @param headerName Header name
* @param headerValue Header value
*/
public void setRequestHeader(String headerName, String headerValue) {
if (headerName.equalsIgnoreCase("Depth")){
int depth = -1;
if (headerValue.equals("0")){
depth = DEPTH_0;
}
else if (headerValue.equals("1")){
depth = DEPTH_1;
}
else if (headerValue.equalsIgnoreCase("infinity")){
depth = DEPTH_INFINITY;
}
setDepth(depth);
}
else{
super.setRequestHeader(headerName, headerValue);
}
}
/**
* Type setter.
*
* @param type New type value
*/
public void setType(int type) {
checkNotUsed();
this.type = type;
}
/**
* Type getter.
*
* @return int type value
*/
public int getType() {
return type;
}
/**
* Depth setter.
*
* @param depth New depth value
*/
public void setDepth(int depth) {
checkNotUsed();
this.depth = depth;
}
/**
* Depth getter.
*
* @return int depth value
*/
public int getDepth() {
return depth;
}
/**
* Property names setter.
* The enumeration may contain strings with or without a namespace prefix
* but the preferred way is to provide PropertyName objects.
*
* @param propertyNames List of the property names
*/
public void setPropertyNames(Enumeration propertyNames) {
checkNotUsed();
Vector list = new Vector();
while (propertyNames.hasMoreElements()) {
Object item = propertyNames.nextElement();
if (item instanceof PropertyName)
{
list.add(item);
}
else if (item instanceof String)
{
String propertyName = (String) item;
int length = propertyName.length();
boolean found = false;
int i = 1;
while (!found && (i <= length)) {
char chr = propertyName.charAt(length - i);
if (!Character.isUnicodeIdentifierPart(chr)
&& chr!='-' && chr!='_' && chr!='.') {
found = true;
} else {
i++;
}
}
if ((i == 1) || (i >= length)) {
list.add(new PropertyName("DAV:",propertyName));
} else {
String namespace = propertyName.substring(0, length + 1 - i);
String localName = propertyName.substring(length + 1 - i);
list.add(new PropertyName(namespace,localName));
}
}
else
{
// unknown type
// ignore
}
}
this.propertyNames = (PropertyName[])list.toArray(new PropertyName[list.size()]);
}
// --------------------------------------------------- WebdavMethod Methods
public void recycle() {
super.recycle();
prefix = null;
}
public String getName() {
return "X-MS-ENUMATTS";
}
/**
* Generate additional headers needed by the request.
*
* @param state State token
* @param conn The connection being used to make the request.
*/
public void addRequestHeaders(HttpState state, HttpConnection conn)
throws IOException, HttpException {
// set the default utf-8 encoding, if not already present
if (getRequestHeader("Content-Type") == null ) super.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
super.addRequestHeaders(state, conn);
switch (depth) {
case DEPTH_0:
super.setRequestHeader("Depth", "0");
break;
case DEPTH_1:
super.setRequestHeader("Depth", "1");
break;
case DEPTH_INFINITY:
super.setRequestHeader("Depth", "infinity");
break;
}
}
/**
* DAV requests that contain a body must override this function to
* generate that body.
*
* <p>The default behavior simply returns an empty body.</p>
*/
public String generateRequestBody() {
XMLPrinter printer = new XMLPrinter();
printer.writeXMLHeader();
printer.writeElement("D", "DAV:", "PROPFIND",
XMLPrinter.OPENING);
switch (type) {
case ALL:
printer.writeElement("D", "allprop", XMLPrinter.NO_CONTENT);
break;
case NAMES:
printer.writeElement("D", "propname", XMLPrinter.NO_CONTENT);
break;
case BY_NAME:
printer.writeElement("D", "prop", XMLPrinter.OPENING);
for (int i=0 ; i<propertyNames.length ; i++)
{
String namespace = propertyNames[i].getNamespaceURI();
String localname = propertyNames[i].getLocalName();
if ("DAV:".equals(namespace)) {
printer.writeElement("D", localname, XMLPrinter.NO_CONTENT);
} else {
if (namespace.length() > 0) {
printer.writeElement("ZZ", namespace, localname,
XMLPrinter.NO_CONTENT);
} else {
printer.writeElement(null, null, localname,
XMLPrinter.NO_CONTENT);
}
}
}
printer.writeElement("D", "prop", XMLPrinter.CLOSING);
break;
}
printer.writeElement("D", "PROPFIND", XMLPrinter.CLOSING);
return printer.toString();
}
/**
* This method returns an enumeration of URL paths. If the attFindMethod
* was sent to the URL of a collection, then there will be multiple URLs.
* The URLs are picked out of the <code><D:href></code> elements
* of the response.
*
* @return an enumeration of URL paths as Strings
*/
public Enumeration getAllResponseURLs() {
checkUsed();
return getResponseURLs().elements();
}
/**
* Returns an enumeration of <code>Property</code> objects.
*/
public Enumeration getResponseProperties(String urlPath) {
checkUsed();
Response response = (Response) getResponseHashtable().get(urlPath);
if (response != null) {
return response.getProperties();
} else {
return (new Vector()).elements();
}
}
}
发表评论
-
手动将class打包成jar包方法
2010-09-10 00:41 2761<!-- ------------------ --&g ... -
教你用Java生成RSS 简单实用
2010-09-10 00:40 3244<!-- ------------------ --&g ... -
代码的坏味道
2010-06-29 13:10 15451. Duplicated Code(重 ... -
java 获取客户端ip mac地址
2010-02-23 15:47 2902转自:http://hi.baidu.com/coolcode ... -
java中输出流OutputStream类应用实例
2010-02-04 15:30 5194OutputStream类 该类是字节输出流的抽象类,定义了输 ... -
大幅优化myeclipse的速度&关闭自动更新
2010-02-01 21:24 1386去除不需要加载的模块 一个系统20%的功能往往能够满足80% ... -
Servlet 上传文件(转)
2010-01-18 14:45 1513编程思路:下面的UploadServlet.java ,其主 ... -
JAVA线程实例-----卖票
2010-01-08 15:44 1943package test; import java. ... -
如何学习Hibernate
2009-12-21 09:28 882Hibernate入门容易,掌握精通我也不敢自夸。我第 ... -
Tomcat 部署 Could not copy all resources to 或者Undeployment Failure could not be re
2009-12-16 22:13 3173Tomcat 部署,在部署可能会出现以下问题: Deploy ... -
Java 的JDBC 数据库连接池实现方法
2009-12-16 01:10 1301关键字: Java, JDBC, Connection Poo ... -
jdbc PreparedStatement的用法
2009-12-15 21:51 40334jdbc(java database connectivity ... -
用java获取文件夹的大小
2009-12-14 09:15 2416/** * <p> * Created on ... -
JavaBean实现多文件上传的两种方法
2009-12-10 10:32 1006摘要:本文介绍了J ... -
通过 http 协议上传文件
2009-12-10 10:07 20761、概述 在最初的 http ... -
自学Javabean迅速成为Java高手
2009-12-10 09:17 782很多网友咨询学习Java有 ... -
response.setContentType()的String参数及对应类型
2009-12-09 13:43 2438response.setContentType()的Strin ... -
Apache Commons fileUpload实现文件上传
2009-10-19 00:15 1223Apache的commons-fileupload.jar可方 ... -
Postfix邮件服务器架设笔记
2009-08-26 06:57 1626# 安装步骤1、安装操作系统 2、安装postfixadmin ... -
3分钟安装配置Postfix邮件服务器
2009-08-26 06:51 2986Linux邮件服务器通常使用sendmail,在网上googl ...
相关推荐
webdav-aliyundriver 实现了阿里云盘的 webdav 协议,只需要简单的配置一下,就可以让阿里云盘变身为webdav协议的文件服务器, 基于此,你可以把阿里云盘挂载为Windows、Linux、Mac系统的磁盘,可以通过NAS系统做...
通过网上邻居访问WebDAV服务器 操作远程文件就像操作本地文件一样
WsgiDAV 是一个用 Python 开发的通用 WebDAV 服务器,基于 WSGI 运行,支持 SSL
自己写的,WIN10 64位亲测可以。解决挂载远程挂载webdav的问题,解决文件超过2G时报错的问题。
基于php的webdav协议的项目
可以通过下面列表中描述的任意一种 Microsoft 产品或通过其他任意的支持行业标准 WebDAV 协议的客户端来访问 WebDAV 发布目录。 ·Windows XP 通过“添加网上邻居向导”与 WebDAV 服务器连接,并显示 WebDAV 目录中...
基于webDAV协议的网盘文件编辑工具
webdav的详细资料,非常有用哦!讲解的很详细,还有举例,很易懂。
基于WebDAV的流式文档访问协议的研究,pdf,在知网上下载的,关于webdav的为数不多的论文。
本项目实现了阿里Teambition网盘的webdav协议,只需要简单的配置一下cookies,就可以让Teambition变身为webdav协议的文件服务器。 基于此,你可以把Teambition挂载为Windows、Linux、Mac系统的磁盘,可以通过NAS系统...
使用 Apache Jackrabbit 实现 WebDAV 客户端 ...本文首先介绍了 WebDAV、JCR 的概念,并介绍了如何使用 Jackrabbit 实现一个 WebDAV 的客户端,最后验证了该客户端在 WebDAV 服务器上各项基本功能的使用。
WebDAV服务器的.NET实现。 概述 我需要用于C#的WebDAV服务器实现,但是找不到满足我的需求的实现。 这就是为什么我写自己的。 要求 快速,可扩展,强大且具有适度的内存使用率。 抽象数据存储,因此它可以用于...
webdav中文客户端,韩棒子的,比Windows自带的好用不知千倍。
使用webdav协议需要用到的jar包,webdav可实现在网页上在线编辑office文档。
使用php开发实现webdav协议的项目 #更新说明 phpdav2.0可不依赖nginx php版本至少php5.4以上 以下非必须: nginx版本建议nginx1.11.0以上 #配置参考 本项目可不用nginx, 使用方法: 下载后,直接在程序安装目录中...
该项目的最初目的是提供一个书签,以便在您要管理WebDAV服务器时使用,而无需使用第三方应用程序。 此后,该应用程序已被重写为不依赖jQuery,而是使用更现代的方法并提供单个运行时文件。 现在,接口代码和库代码...
IIS webdav扫描器IIS webdav扫描器
golang IPFS (ipfs.io) 中间件, webdav服务器
webdav漏洞扫描器, 可以扫描WEB服务器存在的漏洞