/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* http://glassfish.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package whitebox.wsam_epr_interop.client;
import com.sun.xml.ws.api.addressing.WSEndpointReference;
import com.sun.xml.ws.api.server.Container;
import com.sun.xml.ws.api.wsdl.parser.WSDLParserExtension;
import com.sun.xml.ws.api.model.wsdl.WSDLModel;
import com.sun.xml.ws.util.xml.XmlUtil;
import com.sun.xml.ws.util.ServiceFinder;
import com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser;
import junit.framework.TestCase;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.transform.stream.StreamSource;
import javax.xml.ws.EndpointReference;
import javax.xml.namespace.QName;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
/**
* @author Rama Pulavarthi
*/
public class WSAM_EPRTester extends TestCase {
private final XMLOutputFactory staxOut;
public WSAM_EPRTester(String name) {
super(name);
this.staxOut = XMLOutputFactory.newInstance();
staxOut.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);
}
public void testWSAM_EPR_Interop() throws Exception {
System.out.println("****************************************");
System.out.println("Web Services Addressing 1.0 - Metadata");
System.out.println("Section 2.1 - Interop Tests");
System.out.println("Sun Microsystems Report - " + new Date());
System.out.println("****************************************\n");
runMandatoryEPRTests();
runOptionalEPRTests();
}
private void runMandatoryEPRTests() throws Exception {
URL res = getClass().getClassLoader().getResource("epr/wsamTest.wsdl");
File folder = new File(new File(res.getFile()).getParentFile(), "mandatory"); // assuming that this is a file:// URL.
System.out.println("\n\nMandatory Tests:\n");
for (File f : folder.listFiles()) {
if (!f.getName().endsWith(".xml"))
continue;
System.out.println("***************************");
System.out.println("TestFile: " + f.getParentFile().getName() + "/" + f.getName());
try {
InputStream is = new FileInputStream(f);
StreamSource s = new StreamSource(is);
EndpointReference epr = EndpointReference.readFrom(s);
WSEndpointReference wsepr = new WSEndpointReference(epr);
System.out.println("Address: " + wsepr.getAddress());
WSEndpointReference.Metadata metadata = wsepr.getMetaData();
System.out.println("Metadata Valid?: true");
if (metadata.getPortTypeName() != null)
System.out.println("InterfaceName: " + metadata.getPortTypeName());
if (metadata.getServiceName() != null)
System.out.println("ServiceName: " + metadata.getServiceName());
if (metadata.getPortName() != null)
System.out.println("Endpoint: " + metadata.getPortName().getLocalPart());
String wsdliLocation = metadata.getWsdliLocation();
if (metadata.getWsdliLocation() != null) {
System.out.println("wsdli:wsdlLocation: " + wsdliLocation);
String wsdlLocation = wsdliLocation.substring(wsdliLocation.lastIndexOf(" "));
WSDLModel wsdlModel = RuntimeWSDLParser.parse(new URL(wsdlLocation),
new StreamSource(wsdlLocation),
XmlUtil.createDefaultCatalogResolver(),
false, Container.NONE, ServiceFinder.find(WSDLParserExtension.class).toArray());
QName binding = wsdlModel.getBinding(metadata.getServiceName(), metadata.getPortName()).getName();
System.out.println("Binding from WSDL: " + binding);
}
System.out.println("");
} catch (Exception e) {
System.out.println("Metadata Valid?: false");
System.out.println(e.getMessage());
// e.printStackTrace();
}
}
}
private void runOptionalEPRTests() throws Exception {
URL res = getClass().getClassLoader().getResource("epr/wsamTest.wsdl");
File folder = new File(new File(res.getFile()).getParentFile(), "optional"); // assuming that this is a file:// URL.
System.out.println("\n\nOptional Tests:\n");
for (File f : folder.listFiles()) {
if (!f.getName().endsWith(".xml"))
continue;
System.out.println("***************************");
System.out.println("TestFile: " + f.getParentFile().getName() + "/" + f.getName());
try {
InputStream is = new FileInputStream(f);
StreamSource s = new StreamSource(is);
EndpointReference epr = EndpointReference.readFrom(s);
WSEndpointReference wsepr = new WSEndpointReference(epr);
System.out.println("Address: " + wsepr.getAddress());
WSEndpointReference.Metadata metadata = wsepr.getMetaData();
System.out.println("Metadata Valid?: true");
if (metadata.getPortTypeName() != null)
System.out.println("InterfaceName: " + metadata.getPortTypeName());
if (metadata.getServiceName() != null)
System.out.println("ServiceName: " + metadata.getServiceName());
if (metadata.getPortName() != null)
System.out.println("Endpoint: " + metadata.getPortName().getLocalPart());
String wsdliLocation = metadata.getWsdliLocation();
if (metadata.getWsdliLocation() != null) {
System.out.println("wsdli:wsdlLocation: " + wsdliLocation);
String wsdlLocation = wsdliLocation.substring(wsdliLocation.lastIndexOf(" "));
WSDLModel wsdlModel = RuntimeWSDLParser.parse(new URL(wsdlLocation),
new StreamSource(wsdlLocation),
XmlUtil.createDefaultCatalogResolver(),
false, Container.NONE, ServiceFinder.find(WSDLParserExtension.class).toArray());
QName binding = wsdlModel.getBinding(metadata.getServiceName(), metadata.getPortName()).getName();
System.out.println("Binding from WSDL: " + binding);
}
System.out.println("");
} catch (Exception e) {
System.out.println("Metadata Valid?: false");
System.out.println("Reason: "+ e.getMessage());
// e.printStackTrace();
System.out.println("");
}
}
}
public void xtestEPR() throws Exception {
URL res = getClass().getClassLoader().getResource("epr/mandatory/epr3.xml");
InputStream is = res.openStream();
StreamSource s = new StreamSource(is);
EndpointReference epr = EndpointReference.readFrom(s);
WSEndpointReference wsepr = new WSEndpointReference(epr);
WSEndpointReference.Metadata metadata = wsepr.getMetaData();
System.out.println(metadata.getPortName());
System.out.println(metadata.getServiceName());
System.out.println(metadata.getPortTypeName());
}
}