xhr4j/src/main/java/org/netbeans/html/xhr4j/XmlHttpResourceContext.java
author Jaroslav Tulach <jtulach@netbeans.org>
Mon, 29 Feb 2016 05:25:31 +0100
branchxhr4j
changeset 1057 b547f8f663f5
parent 886 ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/TyrusContext.java@88d62267a0b5
permissions -rw-r--r--
#257849: xhr4j module uses java.net package to handle @OnReceive requests to workaround CORS limitations
jaroslav@260
     1
/**
jaroslav@358
     2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
jaroslav@260
     3
 *
jaroslav@551
     4
 * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
jaroslav@260
     5
 *
jaroslav@358
     6
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
jaroslav@358
     7
 * Other names may be trademarks of their respective owners.
jaroslav@260
     8
 *
jaroslav@358
     9
 * The contents of this file are subject to the terms of either the GNU
jaroslav@358
    10
 * General Public License Version 2 only ("GPL") or the Common
jaroslav@358
    11
 * Development and Distribution License("CDDL") (collectively, the
jaroslav@358
    12
 * "License"). You may not use this file except in compliance with the
jaroslav@358
    13
 * License. You can obtain a copy of the License at
jaroslav@358
    14
 * http://www.netbeans.org/cddl-gplv2.html
jaroslav@358
    15
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
jaroslav@358
    16
 * specific language governing permissions and limitations under the
jaroslav@358
    17
 * License.  When distributing the software, include this License Header
jaroslav@358
    18
 * Notice in each file and include the License file at
jaroslav@358
    19
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
jaroslav@358
    20
 * particular file as subject to the "Classpath" exception as provided
jaroslav@358
    21
 * by Oracle in the GPL Version 2 section of the License file that
jaroslav@358
    22
 * accompanied this code. If applicable, add the following below the
jaroslav@358
    23
 * License Header, with the fields enclosed by brackets [] replaced by
jaroslav@358
    24
 * your own identifying information:
jaroslav@358
    25
 * "Portions Copyrighted [year] [name of copyright owner]"
jaroslav@358
    26
 *
jaroslav@358
    27
 * Contributor(s):
jaroslav@358
    28
 *
jaroslav@358
    29
 * The Original Software is NetBeans. The Initial Developer of the Original
jaroslav@551
    30
 * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
jaroslav@358
    31
 *
jaroslav@358
    32
 * If you wish your version of this file to be governed by only the CDDL
jaroslav@358
    33
 * or only the GPL Version 2, indicate your decision by adding
jaroslav@358
    34
 * "[Contributor] elects to include this software in this distribution
jaroslav@358
    35
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
jaroslav@358
    36
 * single choice of license, a recipient has the option to distribute
jaroslav@358
    37
 * your version of this file under either the CDDL, the GPL Version 2 or
jaroslav@358
    38
 * to extend the choice of license to its licensees as provided above.
jaroslav@358
    39
 * However, if you add GPL Version 2 code and therefore, elected the GPL
jaroslav@358
    40
 * Version 2 license, then the option applies only if the new code is
jaroslav@358
    41
 * made subject to such option by the copyright holder.
jaroslav@260
    42
 */
jtulach@1057
    43
package org.netbeans.html.xhr4j;
jaroslav@260
    44
jaroslav@260
    45
import java.io.IOException;
jaroslav@446
    46
import java.io.InputStream;
jaroslav@263
    47
import net.java.html.json.OnReceive;
jtulach@838
    48
import org.netbeans.html.context.spi.Contexts;
jtulach@838
    49
import org.netbeans.html.json.spi.JSONCall;
jtulach@838
    50
import org.netbeans.html.json.spi.Transfer;
jaroslav@260
    51
import org.openide.util.lookup.ServiceProvider;
jaroslav@260
    52
jtulach@1057
    53
/** Implementation module with support for XHR via Java.
jtulach@1057
    54
 * Handles {@link OnReceive} requests by using Java to connect to given
jtulach@1057
    55
 * URL and then parsing it via JavaScript. Use this module if you have
jtulach@1057
    56
 * problems with CORS - as the Java connection isn't restricted by CORS
jtulach@1057
    57
 * rules.
jtulach@1057
    58
 * 
jtulach@1057
    59
 * Registers {@link Transfer} technology at position <code>50</code>.
jtulach@1057
    60
 * The {@link Contexts.Id} of the technology is <b>xhr4j</b>.
jtulach@1057
    61
 * 
jtulach@790
    62
 * @author Jaroslav Tulach
jtulach@1057
    63
 * @since 1.3
jaroslav@260
    64
 */
jtulach@1057
    65
@Contexts.Id("xhr4j")
jaroslav@260
    66
@ServiceProvider(service = Contexts.Provider.class)
jtulach@1057
    67
public final class XmlHttpResourceContext
jtulach@1057
    68
implements Contexts.Provider, Transfer {
jaroslav@260
    69
    @Override
jaroslav@260
    70
    public void fillContext(Contexts.Builder context, Class<?> requestor) {
jtulach@1057
    71
        context.register(Transfer.class, this, 50);
jaroslav@260
    72
    }
jaroslav@446
    73
jaroslav@446
    74
    @Override
jaroslav@446
    75
    public void extract(Object obj, String[] props, Object[] values) {
jaroslav@446
    76
        LoadJSON.extractJSON(obj, props, values);
jaroslav@446
    77
    }
jaroslav@446
    78
jaroslav@446
    79
    @Override
jaroslav@446
    80
    public Object toJSON(InputStream is) throws IOException {
jtulach@1057
    81
        return LoadJSON.parse(LoadJSON.readStream(is));
jaroslav@446
    82
    }
jaroslav@446
    83
jaroslav@446
    84
    @Override
jaroslav@446
    85
    public void loadJSON(JSONCall call) {
jaroslav@446
    86
        LoadJSON.loadJSON(call);
jaroslav@446
    87
    }
jaroslav@260
    88
}