/**
* Copyright © 2006-2016 Web Cohesion (info@webcohesion.com)
*
* 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 com.webcohesion.enunciate.tests.jaxwsrijersey;
import com.sun.xml.ws.util.ByteArrayDataSource;
import genealogy.client.cite.InfoSet;
import genealogy.client.cite.Source;
import genealogy.client.data.*;
import genealogy.client.services.*;
import genealogy.client.services.impl.AssertionServiceImpl;
import genealogy.client.services.impl.PersonServiceImpl;
import genealogy.client.services.impl.RelationshipServiceImpl;
import genealogy.client.services.impl.SourceServiceImpl;
import junit.framework.TestCase;
import javax.activation.DataHandler;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URI;
import java.util.*;
/**
* @author Ryan Heaton
*/
public class TestFullJAXWSRIAPIWithJAXWSClient extends TestCase {
/**
* Tests the full API
*/
public void testFullSOAPAPI() throws Exception {
int port = 8080;
if (System.getProperty("container.port") != null) {
port = Integer.parseInt(System.getProperty("container.port"));
}
String context = "full";
if (System.getProperty("container.test.context") != null) {
context = System.getProperty("container.test.context");
}
SourceServiceImpl impl = new SourceServiceImpl("http://localhost:" + port + "/" + context + "/sources/source");
SourceService sourceService = impl;
Source source = sourceService.getSource("valid");
assertEquals("valid", source.getId());
assertEquals(URI.create("uri:some-uri"), source.getLink());
assertEquals("some-title", source.getTitle());
assertNull(sourceService.getSource("invalid"));
try {
sourceService.getSource("throw");
fail("Should have thrown the exception.");
}
catch (ServiceException e) {
assertEquals("some message", e.getMessage());
assertEquals("another message", e.getAnotherMessage());
}
try {
sourceService.getSource("unknown");
fail("should have thrown the unknown source exception.");
}
catch (UnknownSourceException e) {
UnknownSourceBean bean = e.getFaultInfo();
assertEquals("unknown", bean.getSourceId());
assertEquals(888, bean.getErrorCode());
}
assertEquals("newid", sourceService.addInfoSet("somesource", new InfoSet()));
assertEquals("okay", sourceService.addInfoSet("othersource", new InfoSet()));
assertEquals("resourceId", sourceService.addInfoSet("resource", new InfoSet()));
try {
sourceService.addInfoSet("unknown", new InfoSet());
fail("Should have thrown the exception.");
}
catch (ServiceException e) {
assertEquals("unknown source id", e.getMessage());
assertEquals("anyhow", e.getAnotherMessage());
}
PersonService personService = new PersonServiceImpl("http://localhost:" + port + "/" + context + "/PersonServiceService");
ArrayList<String> ids = new ArrayList<String>(Arrays.asList("id1", "id2", "id3", "id4"));
Collection persons = personService.readPersons(ids);
for (Object o : persons) {
Person person = (Person) o;
assertTrue(ids.remove(person.getId()));
assertEquals(new Date(1L), ((Event) person.getEvents().iterator().next()).getDate());
}
Collection<Person> empty = personService.readPersons(null);
assertTrue(empty == null || empty.isEmpty());
personService.deletePerson("somebody", "my message");
try {
personService.deletePerson(null, null);
fail("Should have thrown the exception.");
}
catch (ServiceException e) {
assertEquals("a person id must be supplied", e.getMessage());
assertEquals("no person id.", e.getAnotherMessage());
}
Person person = new Person();
person.setId("new-person");
assertEquals("new-person", personService.storePerson(person).getId());
byte[] pixBytes = "this is a bunch of bytes that I would like to make sure are serialized correctly so that I can prove out that attachments are working properly".getBytes();
person.setPicture(new DataHandler(new ByteArrayDataSource(pixBytes, "image/jpeg")));
DataHandler returnedPix = personService.storePerson(person).getPicture();
ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
InputStream inputStream = returnedPix.getInputStream();
int byteIn = inputStream.read();
while (byteIn > -1) {
bytesOut.write(byteIn);
byteIn = inputStream.read();
}
RootElementMapAdapted map = new RootElementMapAdapted();
ArrayList<RootElementMapAdaptedEntry> entries = new ArrayList<RootElementMapAdaptedEntry>();
RootElementMapAdaptedEntry entry1 = new RootElementMapAdaptedEntry();
entry1.setKey("person1");
RootElementMapAdaptedValue value1 = new RootElementMapAdaptedValue();
Person person1 = new Person();
person1.setId("person1id");
value1.setValue(Arrays.asList((Object) person1));
entry1.setValue(value1);
entries.add(entry1);
RootElementMapAdaptedEntry entry2 = new RootElementMapAdaptedEntry();
entry2.setKey("person2");
RootElementMapAdaptedValue value2 = new RootElementMapAdaptedValue();
Person person2 = new Person();
person2.setId("person2id");
value2.setValue(Arrays.asList((Object) person2));
entry2.setValue(value2);
entries.add(entry2);
RootElementMapAdaptedEntry entry3 = new RootElementMapAdaptedEntry();
entry3.setKey("source1");
RootElementMapAdaptedValue value3 = new RootElementMapAdaptedValue();
Source source1 = new Source();
source1.setId("source1id");
value3.setValue(Arrays.asList((Object) source1));
entry3.setValue(value3);
entries.add(entry3);
RootElementMapAdaptedEntry entry4 = new RootElementMapAdaptedEntry();
entry4.setKey("source2");
RootElementMapAdaptedValue value4 = new RootElementMapAdaptedValue();
Source source2 = new Source();
source2.setId("source2id");
value4.setValue(Arrays.asList((Object) source2));
entry4.setValue(value4);
entries.add(entry4);
map.setEntry(entries);
RootElementMapWrapper wrapper = new RootElementMapWrapper();
wrapper.setMap(map);
wrapper = personService.storeGenericProperties(wrapper);
RootElementMapAdapted retVal = wrapper.getMap();
assertNotNull(retVal.getEntry());
assertEquals(4, retVal.getEntry().size());
// assertTrue(retVal.getEntry().get(0).getValue().getValue() instanceof Person);
// assertTrue(retVal.getEntry().get(1).getValue().getValue() instanceof Person);
// assertTrue(retVal.getEntry().get(2).getValue().getValue() instanceof Source);
// assertTrue(retVal.getEntry().get(3).getValue().getValue() instanceof Source);
RelationshipService relationshipService = new RelationshipServiceImpl("http://localhost:" + port + "/" + context + "/RelationshipServiceService");
List list = relationshipService.getRelationships("someid");
for (int i = 0; i < list.size(); i++) {
Relationship relationship = (Relationship) list.get(i);
assertEquals(String.valueOf(i), relationship.getId());
}
try {
relationshipService.getRelationships("throw");
fail("Should have thrown the relationship service exception, even though it wasn't annotated with @WebFault.");
}
catch (RelationshipException e) {
assertEquals("hi", e.getMessage());
}
relationshipService.touch();
AssertionService assertionService = new AssertionServiceImpl("http://localhost:" + port + "/" + context + "/AssertionServiceService");
List<Assertion> assertions = assertionService.readAssertions();
Assertion gender = assertions.get(0);
assertEquals("gender", gender.getId());
assertTrue(gender instanceof Gender);
Assertion name = assertions.get(1);
assertEquals("name", name.getId());
assertTrue(name instanceof Name);
}
}