Is it possible to throw a BPELFault from a custom xpath function?

I'm probably revealing my lack of java chops here, but I'd like to know if there's a way to throw a BPELFault from the "call" method within a custom xpath function.
The interface for IXPathFunction seems to dictate that "call" throws only an XPathFunctionException and the bpel server doesn't handle this exception properly. It records the exception in the logs but then the process just dies.
Right now I have this (simplified code):
public Object call(IXPathContext context,
List args) throws XPathFunctionException
if (args.size() == 1)
// do some stuff and return a value
throw new XPathFunctionException( "hexToInt() requires one string argument." );
What I want to have is something like this:
public Object call(IXPathContext context,
List args) throws BPELFault
if (args.size() == 1)
// do some stuff and return a value
BPELFault fault = new BPELFault(
new javax.xml.namespace.QName("http://schemas.xmlsoap.org/ws/2003/03/business-process/",
"selectionFailure"));
fault.setPart("code", "intToHex");
fault.setPart("summary", "hexToInt() requires one string argument.");
throw fault;
If I do this, the compiler rejects it saying that "call" must throw XPathFunctionException. Is there a way to extend the IXPathFunction interface to allow it to throw a useful fault?
Thanks!
Sean

Yeah, I'm using that patch (otherwise the process just crashes and you don't have a chance to catch the fault, even in a catchAll). Within the catchAll you can get the details from the error with something like this:
<copy>
<from expression="concat(ora:getFaultName(),'')"/>
<to variable="processFault" part="payload" query="/ns4:summary"/>
</copy>
<copy>
<from expression="concat(ora:getFaultAsString(),'')"/>
<to variable="processFault" part="payload" query="/ns4:detail"/>
</copy>

Similar Messages

  • Is it possible to throw an exception from run method of a thread?

    Is it possible to throw an exception from "run method of a thread"(implemented as runnable implementation)?
    Is it advisable to do so?

    Is it possible to throw an exception from "run method
    of a thread"(implemented as runnable
    implementation)?Yes, an unchecked one. Runtime exceptions.
    Is it advisable to do so?If you mess up it happens automatically. But basically: no.

  • Is it possible to throw an exception from a handler chain with JAXWS???

    I know I cannot throw directly an exception from the handler cause my handler extends SOAPHandler and the method handlerMessage cannot throw exceptions. The problem is that I would like to validate some authorization and if the client doesn't have the appropriate rights, I would like to throw an exception from the handler without calling the web service itself, so the client would receive a valid soap response from the server. Is it possible?? Is there another mechanism that I can use to do that??
    Thanks a lot
    Korg

    You can throw a ProtocolException or RuntimeException from handleMessage().
    If you throw ProtocolException, HandleFault() is called on previously invoked handlers.
    If you throw a RuntimeException, handleFault() or handleMessage() is not called on previously invoked handlers, and the Exception is converted to Fault message and dispatched.

  • Is it possible to throw another Fault from Fault Policy handler Java Class?

    Hi,
    I am using SOA Suite 11g. My requirement is to catch any Fault that occurs in BPEL in the Fault Policy java handler, and then throw back another Fault (Which i want to create from the java class hander) by setting the Fault Part and other Fault details.
    I will be getting the Fault message and code etc for different kinds of faults from a .properties file.
    I tried creating a new BPELFault inside the handleFault method...
    BPELFaultRecoveryContextImpl bpelCtx = (BPELFaultRecoveryContextImpl) ctx;
    QName qName = new QName("http://xmlns.oracle.com/Application1_jws/FMF_Demo/FaultHandlerDemo","GenericFault");
    BPELFault flt = new BPELFault(qName);
    flt.setFaultName(qName);
    flt.setPart("<faultPartName>","Fault Message Text...");
    bpelCtx.setFault(flt);
    The new Fault is thrown back to the BPEL process, but i am not able to get the Fault details within the catch block (for GenericFault) that i have set in the Java Handler.
    Any help regarding this is highly appreciated.
    Regards,
    Shreyas

    Has anybody come across this issue? Please help.
    Regards,
    Shreyas

  • How to get BPELFault from MediatorRecoveryContext?

    Hi,
    In SOA Suite 11g I have implemented a custom FaultHandler (implements IFaultRecoveryJavaClass)
    In my composite I have a Mediator calling a BPEL process.
    The BPEL process throws a BPELFault.
    Im my fault handler handleFault(IFaultRecoveryContext ctx) gets called.
    In this case ctx is an instance of MediatorRecoveryContext.
    How can I get the details of this BPELFault in my handleFault?
    MediatorRecoveryContext.getFault does not seem to have the BPELFault.
    In EM I see:
    Error Message: ORAMED-03303
    Fault ID     B5546DA036E711E1BFF54D2B34CBB32F
    Fault Time     04-Jan-2012 16:21:00
    System Fault :
    ORAMED-03303:[Unexpected exception in case execution]Unexpected exception in request response operation "process" on reference "UBLDespatchAdviceAfleverProces.ubldespatchadviceafleverproces_client".
    Possible Fix:Check whether the reference service is properly configured and running or look at exception for analyzing the reason or contact Oracle Support Services.
    Cause:
    faultName: {{http://schemas.oracle.com/bpel/extension}remoteFault}
    messageType: {{http://schemas.oracle.com/bpel/extension}RuntimeFaultMessage}
    parts: {{ summary=<summary>E</summary> ,detail=<detail>This is not completely right.</detail> ,code=<code>52014</code>}
    Groeten,
    HJH

    - there are no EJB3 scripts, only compiled application code
    - the part of the EJB spec that deals with databases is called the Java Persistence API, but likely you are just looking for the JDBC API.
    Now you should know what to Google to get your "example script": "java jdbc oracle procedure"

  • Is it possible to print a JPanel from the application?

    Hello,
    Just a quick question: Is it possible to print a JPanel from your application? I have plotted a graph and I would like user to be able to print this with a click of a button (or similar)
    Thanks very much for your help, its appreciated as always.
    Harold Clements

    It is absolutely possible
    Check out my StandardPrint class. Basically all you need to do is
    (this is pseudocode. I don't remember the exact names of methods for all this stuff. Look it up if there's a problem)
    PrinterJob pd = PrinterJob.createNewJob();
    StandardPrint sp = new StandardPrint(yourComponent);
    pd.setPageable(sp);
    //if you want this
    //pd.pageDialog();
    pd.doPrint();You are welcome to have use and modify this class but please don't change the package or take credit for it as your own code.
    StandardPrint.java
    ===============
    package tjacobs.print;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.awt.print.*;
    import javax.print.PrintException;
    public class StandardPrint implements Printable, Pageable {
        Component c;
        SpecialPrint sp;
        PageFormat mFormat;
         boolean mScale = false;
         boolean mMaintainRatio = true;
        public StandardPrint(Component c) {
            this.c = c;
            if (c instanceof SpecialPrint) {
                sp = (SpecialPrint)c;
        public StandardPrint(SpecialPrint sp) {
            this.sp = sp;
         public boolean isPrintScaled () {
              return mScale;
         public void setPrintScaled(boolean b) {
              mScale = b;
         public boolean getMaintainsAspect() {
              return mMaintainRatio;
         public void setMaintainsAspect(boolean b) {
              mMaintainRatio = b;
        public void start() throws PrinterException {
            PrinterJob job = PrinterJob.getPrinterJob();
            if (mFormat == null) {
                mFormat = job.defaultPage();
            job.setPageable(this);
            if (job.printDialog()) {
                job.print();
        public void setPageFormat (PageFormat pf) {
            mFormat = pf;
        public void printStandardComponent (Pageable p) throws PrinterException {
            PrinterJob job = PrinterJob.getPrinterJob();
            job.setPageable(p);
            job.print();
        private Dimension getJobSize() {
            if (sp != null) {
                return sp.getPrintSize();
            else {
                return c.getSize();
        public static Image preview (int width, int height, Printable sp, PageFormat pf, int pageNo) {
            BufferedImage im = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            return preview (im, sp, pf, pageNo);
        public static Image preview (Image im, Printable sp, PageFormat pf, int pageNo) {
            Graphics2D g = (Graphics2D) im.getGraphics();
            int width = im.getWidth(null);
            int height = im.getHeight(null);
            g.setColor(Color.WHITE);
            g.fillRect(0, 0, width, height);
            double hratio = height / pf.getHeight();
            double wratio = width / pf.getWidth();
            //g.scale(hratio, wratio);
            try {
                   sp.print(g, pf, pageNo);
              catch(PrinterException pe) {
                   pe.printStackTrace();
            g.dispose();
            return im;
        public int print(Graphics gr, PageFormat format, int pageNo) {
            mFormat = format;
            if (pageNo > getNumberOfPages()) {
                return Printable.NO_SUCH_PAGE;
            Graphics2D g = (Graphics2D) gr;
              g.drawRect(0, 0, (int)format.getWidth(), (int)format.getHeight());
            g.translate((int)format.getImageableX(), (int)format.getImageableY());
            Dimension size = getJobSize();
              if (!isPrintScaled()) {
                 int horizontal = getNumHorizontalPages();
                 int vertical = getNumVerticalPages();
                 int horizontalOffset = (int) ((pageNo % horizontal) * format.getImageableWidth());
                 int verticalOffset = (int) ((pageNo / vertical) * format.getImageableHeight());
                 double ratio = getScreenRatio();
                 g.scale(1 / ratio, 1 / ratio);
                 g.translate(-horizontalOffset, -verticalOffset);
                 if (sp != null) {
                     sp.printerPaint(g);
                 else {
                     c.paint(g);
                 g.translate(horizontal, vertical);
                 g.scale(ratio, ratio);
              else {
                 double ratio = getScreenRatio();
                 g.scale(1 / ratio, 1 / ratio);
                   double xScale = 1.0;
                   double yScale = 1.0;
                   double wid;
                   double ht;
                   if (sp != null) {
                        wid = sp.getPrintSize().width;
                        ht = sp.getPrintSize().height;
                   else {
                        wid = c.getWidth();
                        ht = c.getHeight();
                   xScale = format.getImageableWidth() / wid;
                   yScale = format.getImageableHeight() / ht;
                   if (getMaintainsAspect()) {
                        xScale = yScale = Math.min(xScale, yScale);
                   g.scale(xScale, yScale);
                   if (sp != null) {
                        sp.printerPaint(g);
                   else {
                        c.paint(g);
                   g.scale(1 / xScale, 1 / yScale);
                   g.scale(ratio, ratio);
             g.translate((int)-format.getImageableX(), (int)-format.getImageableY());     
            return Printable.PAGE_EXISTS;
        public int getNumHorizontalPages() {
            Dimension size = getJobSize();
            int imWidth = (int)mFormat.getImageableWidth();
            int pWidth = 1 + (int)(size.width / getScreenRatio() / imWidth) - (imWidth == size.width ? 1 : 0);
            return pWidth;
        private double getScreenRatio () {
            double res = Toolkit.getDefaultToolkit().getScreenResolution();
            double ratio = res / 72.0;
            return ratio;
        public int getNumVerticalPages() {
            Dimension size = getJobSize();
            int imHeight = (int)mFormat.getImageableHeight();
            int pHeight = (int) (1 + (size.height / getScreenRatio() / imHeight)) - (imHeight == size.height ? 1 : 0);
            return pHeight;
        public int getNumberOfPages() {
              if (isPrintScaled()) return 1;
            return getNumHorizontalPages() * getNumVerticalPages();
        public Printable getPrintable(int i) {
            return this;
        public PageFormat getPageFormat(int page) {
            if (mFormat == null) {
                PrinterJob job = PrinterJob.getPrinterJob();
                mFormat = job.defaultPage();
            return mFormat;
    }

  • Is it possible to restart a download from the amount downloaded previously?

    Is it possible to restart a download from the amount downloaded previously?
    When I download some lectures from iTunes U, sometimes the link breaks and the download gets interupted.Then when the download is resumed it starts from 0 KB and not from the KB amount that was downloaded when the download was interupted.Is there a way to resume the download from the point it was interrupted?

    Well I'm using 9.0.3.1.5 and I STILL have this same problem.
    Not sure if location is a factor, but I'm a US resident with a US iTunes account but I spend most of my time in Asia and I know a LOT of folks in India, UAE, etc with it. Everything else in iTunes works perfectly fine, except resuming non-purchased downloads.
    On Apple Support I could only find a solution related to Purchased downloads, but not individual unsubscribed podcasts you clicked GET on or free iTunesU content. These still go back to zero with no option to resume only restart.
    I mean, every quality download manager for your web browser gives you a consistent experience in resuming almost any download except very few servers on the Internet with specific policies to not allow resumes. If there is no solution just silence, either this is one of those mysterious come-and-go bugs that are hard to replicate or maybe iTunes is conserving bandwidth by discouraging resumes of free content it doesn't make money on. Especially 100MB+ files from folks in places with reliable but slower "3rd world" connections. So I would with a half bitten lip throw an answer your question as NO, it is not possible.
    I do hope someone who thinks they have a solution steps in to say Yes, it would make a lot of people very happy.

  • Is it possible to transfer files (music) from an ipod touch to itunes

    Is it possible to transfer files (music) from an ipod touch to itunes

    tamz29 wrote:
    Hello tt2
    Been using your Syncstats, working magically.
    However though, when I try to sync the stats of all songs at once - if one song poses a problem - everything stops.
    Is there a way around this?
    Rather than: click "no" (in order to manually sync songs one by one)??
    By the way - this pops up:
    Line: 136. Char:53
    A0040203
    Lines 136 & 137 deal with updating the Last Played and Last Skipped values. I initially suspected the error could be being caused by null values in one of the fields which I didn't encounter in testing, however the same values are accessed previously in lines 129 & 131. Ideally I'd work out exactly what causes the error so I can test for the problem issue rather than throw the error, handle those circumstances in the most sensible way given the aim of the script, and continue to process non-error causing values as is.
    The quick alternative is to ignore the error by placing an On Error Resume Next statement before the possibly probablematic code, and an On Error Goto 0 statement after it to resume normal error handling. I.e.
    On Error Resume Next
    {Ignore errors in this block}
    On Error Goto 0
    Not always a good idea but in this case I suspect "Do nothing" would be the appropiate action in those cases that currently cause an error so I've made that change and posted up the new build of SyncStats. Let me know how you get on.
    tt2

  • Throwing an exception from XSLT

    Just wanted to share a finding with the Oracle XDB community and possibly suggest an enhancement to the xdb product development team (care of MDRAKE).
    I had a scenario where I wanted to throw an exception from the XSLT.
    A little Googling revealed this helpful post:
    http://weblogs.asp.net/george_v_reilly/archive/2006/03/01/439402.aspx
    ...so I gave it a shot.
    In my XSLT, I have a <xsl:choose> block with the following <xsl:otherwise> block:
    <xsl:otherwise>
        <xsl:message terminate="yes">Unknown Document Type</xsl:message>                          
    </xsl:otherwise>I used a stub test to run this through, giving it a file which would exercise the exception:
    select xmltype(bfilename('XML_RESOURCES', 'data.xml'),0).transform(xmltype(bfilename('XML_RESOURCES', 'sanitize_xml.dev.xsl'),0))
    from dual;..and to my 'joy', I did get an exception:
    ORA-30998: transformation error: execution of compiled XSLT on XML DOM failedHmm...would of been nicer to get something like what Eclipse/Xalan pops out:
    file:/H:/eclipse_indigo_workspace/XSLT/sanitize_xml.xsl; Line #28; Column #59; Unknown Document Type
    (Location of error unknown)Stylesheet directed termination...i.e. my custom error message "Unknown Document Type" isn't output by Oracle.
    Just to be safe, I tried a file which would NOT exercise this xsl:otherwise block and it did run through OK.
    So, could XDB report a better error?
    Thoughts?

    SQL> VAR XSL VARCHAR2(4000)
    SQL> --
    SQL> begin
      2    :XSL :=
      3  '<?xml version="1.0" encoding="UTF-8"?>
      4  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      5     <xsl:output method="xml" indent="yes"/>
      6     <xsl:template match="/">
      7             <Result>
      8                     <xsl:choose>
      9                             <xsl:when test="Input=''1''">
    10                                     <Output>1</Output>
    11                             </xsl:when>
    12                             <xsl:when test="Input=''2''">
    13                                     <xsl:message>The value is 2</xsl:message>
    14                                     <Output>2</Output>
    15                             </xsl:when>
    16                             <xsl:when test="Input=''3''">
    17                                     <xsl:message terminate="no">The value is 3</xsl:message>
    18                                     <Output>3</Output>
    19                             </xsl:when>
    20                             <xsl:otherwise>
    21                                     <xsl:message terminate="yes">Invalid value</xsl:message>
    22                                     <Output>Bad Input</Output>
    23                             </xsl:otherwise>
    24                     </xsl:choose>
    25             </Result>
    26     </xsl:template>
    27  </xsl:stylesheet>';
    28  end;
    29  /
    PL/SQL procedure successfully completed.
    Elapsed: 00:00:00.00
    SQL> select XMLTRANSFORM(XMLTYPE('<Input>1</Input>'),XMLTYPE(:XSL))
      2    from dual
      3  /
    <?xml version="1.0" encoding="WINDOWS-1252"?>
    <Result>
      <Output>1</Output>
    </Re
    Elapsed: 00:00:00.01
    SQL> select XMLTRANSFORM(XMLTYPE('<Input>2</Input>'),XMLTYPE(:XSL))
      2    from dual
      3  /
    <?xml version="1.0" encoding="WINDOWS-1252"?>
    <Result>
      <Output>2</Output>
    </Re
    Elapsed: 00:00:00.00
    SQL> select XMLTRANSFORM(XMLTYPE('<Input>3</Input>'),XMLTYPE(:XSL))
      2    from dual
      3  /
    <?xml version="1.0" encoding="WINDOWS-1252"?>
    <Result>
      <Output>3</Output>
    </Re
    Elapsed: 00:00:00.01
    SQL> select XMLTRANSFORM(XMLTYPE('<Input>4</Input>'),XMLTYPE(:XSL))
      2    from dual
      3  /
    ERROR:
    ORA-30998: transformation error: execution of compiled XSLT on XML DOM failed
    no rows selected
    Elapsed: 00:00:00.01
    SQL>
    SQL>The actuall error is not unreasonalbe. The Execution did fail beacuse you terminated it.. Contacting Oralce Support may be a little excessive...
    Now with respect to message the question is where...
    We 'could' output into the same buffer as is used by DBMS_OUTPUT, but that has limits in terms of the amount of output that can be generated.
    We could write it to the trace file, but that may be difficulat for a developer to get to
    We could write it to a log file in the XDB repository, but where and how to name it...
    We could another parameter to XMLTransform, which would be a Message Buffer
    All of these are in effect enhancements..
    BTW I checked with XML Spy and they seem to ignore message too, so I'm wondering how widely used this is...
    We cannot add it to the output of the XSL since XMLTransform defines the output of the XML to be well formed XML, and adding a random set of text nodes would viloate that rule..

  • Is it possible to send error message from Adapter Module to CCMS?

    Hi
    Is it possible to send error message from Adapter Module  to CCMS...?I have written on adatper module from there i have to send error message to CCMS or SXMB_MONI. Is it possible if yes please send me the related documents
    Best Regards
    Ravi Shankar B

    Hi
    I have written following User Defined Exeption in my Module program
    class DuplicateFileException extends ModuleException{
              DuplicateFileException(String message){
                   super(message);
    I am throwing my Exception like this
    try{
         throw new DuplicateFileException("Duplicate File");
    }catch(DuplicateFileException e){
         throw e;
    But i am not getting this exception in SXMB_MONI. In adpater monitoring i am getting the following exceptions
    <b>
    2007-05-16 15:51:30 GMT+05:30: Retry interval started. Length: 5.000 s
    - 2007-05-16 15:51:30 GMT+05:30: Error: java.lang.NullPointerException
    - 2007-05-16 15:51:30 GMT+05:30: An unknown error occured.
    - 2007-05-16 15:51:30 GMT+05:30: Processing started
    - 2007-05-16 15:51:25 GMT+05:30: Error: java.lang.NullPointerException</b>
    can any one give me the idea how to send error from module program to SXMB_MONI
    Thanks & Regards
    Ravi Shankar B

  • Is it possible to pass a string from an applet to the web site?

    Hi, everybody!
    Is it possible to pass a String from an applet to a web site (as a field value in a form, an ASP variable, or anything else). Basically, I have a pretty large String that is being edited by an applet. When a user clicks on the submit button, a different page will show up which has to display the modified string. The String is pretty large so it doesn't fit into the URL variable.
    Please, help!
    Thank you so much!

    Why do you want to do this in Java?
    Javascript is the correct language for these type of situations.
    for instance:
    in the head of your html document:
    <script language=javascript type="text/javascript">
    createWindow(form){
    if(form.text.value!=""){
    newDoc = new document
    newDoc.write(form.text.value)
    newWin = window.open(document,'newWin','width=200;height=150')
    </script>
    in the body:
    <form onSubmit="createWindow(this)">
    <p>
    Enter a String:<input type=text size=30 name="text">
    </p><p>
    <input type=submit value="submit"> 
    <input type=reset value="reset">
    </p>
    </form>

  • Is it possible to launch a form from an OAF page using OAF Personalization

    In R11, the Customer Standard form ARXCUDCI was customized to call a custom block from the Address screen. In R12 the customer standard form has become an OAF page. We have decided to create a custom form for the custom block using Oracle Developer. However we need a mechanism to call this custom form from the Customer Standard OAF page.
    My query is if it is possible to call a custom form from an OAF page using OAF personalization only (i.e. without directly customizing the code of the OAF page)
    Thanks
    Sanjay

    Dear Apurba,
    I have made some progress.
    I have open the Customers OAF Page, queried a customer, selected a site and opened it.
    Then chose Personalize "Account Site Address"
    There I added a Button on the Header Address level
    ID=XXTVL_LASSY_BUTTON
    Populated the Additional Text and Prompt properties.
    Also set Destination URI=form:SYSADMIN:SYSTEM_ADMINISTRATOR:STANDARD:FND_FNDMNMNU.
    The button is now showing in the address page, and when I click on it it opens the seeded Menu form.
    I now have to create the custom form and set Destination URI to the Custom Form.
    I am also aware how to add parameters to Destination URI.
    But could you let me know how to read the value from a OAF page form field and reference it in Destination URI.
    I need the value of PARTY_SITE_ID of the Address OAF page.
    Alternatively, the Site Number is displayed on the OAF page. If I can read it that will also do. I can use the Site Number in the custom form rather than PARTY_SITE_ID
    Thanks
    Sanjay

  • HT204053 the only way to creat an icloud account is with a ipad, iphone or imac. is it possible to creat the account from my windos PC? i already downladed i cloud, and i have an Apple ID but Not an Icloud account/

    the only way to creat an icloud account is with a ipad, iphone or imac. is it possible to creat the account from my windos PC? i already downladed i cloud, and i have an Apple ID but Not an Icloud account/

    Isa Garduño wrote:
    the only way to creat an icloud account is with a ipad, iphone or imac Apple computer.
    As you already knew, no, you cannot create a new iCloud account from anything but the above devices.
    http://support.apple.com/kb/HT4436

  • Is it possible to transfer music/videos from one itunes account to a separate one?  I need to give my music and videos that I bought a grandchild to her for her ipad.

    Is it possible to transfer music/videos from my itunes account to a grandchild (she will need her own account)  I bought her music and videos and let her play with my ipod touch.  Now she has an ipad.

    No you cannot transfer purchases from one account to another account. Apple does not allow it and never has allowed it.
    She can use you Apple ID on the device and switch between her ID and your ID, but that can cause problems at times and can become a bit of a pain.

  • Is it possible to download iOS  5 from one iMac and not get them totally wiped of apps and stuff. We have an iPad each and a communal email address and an iCloud address each. One iPad now is totally screwed up.

    Is it possible to download iOS  5 from one iMac on two ipads and not get them totally wiped of apps and stuff. We have an iPad each and a communal email address and an iCloud address each. One iPad now is totally screwed up.

    Thank you for your reply.
    I am somewhat new to iOS and OS having grown up with DOS and Windows. I am not familiar with IMAP and iCloud and I am not even sure which types of servers my various emails use.
    The problem I would anticipate with iCloud is that (I assume) it would limit my access to data (including mail) on the iCloud to when I happen to be logged onto the internet. I also assume(?) that large files (photos etc.) would require some time to download whenever I wish to access them from whichever device I happen to be using (I hope I am wrong about this).
    I have kept my devices to 500gb - 1TB for OS and 32gb - 128gb for iOS but since I have pretty slow WiFi (shared with DirecTV Whole Home and Netflix streaming) it is my impression that iCloud might be quite limited due to data transfer times.
    Perhaps a factor would be that I have 2 DSL lines and my main DSL line is connected to two wireless routers (to also provide WiFi in a metal building that blocks WiFi and Cellular signals)
    I may be totally wrong in my assumptions regarding iCloud. My mail is not so urgent that I need access to it instantly and I could wait until I had internet access or I can get it on my iPhone. My main concern with iCloud would be my data files (Word, Pages, Excel, Numbers etc.).
    On the other hand, if I wanted to keep my 10,000 emails that would take up a lot of iCloud memory and I don't know how to measure how much storage it would take or how to move Hotmail or even iCloud mail to iCloud.
    It may take me some time to figure this out.

Maybe you are looking for