|
Thread Rules 1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution. 2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20) 3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible. 4. Use [code] tags to format code blocks. |
QUICK UPDATE
i changed the 2 things to look a bit more like the old example.... they look like this now and i'm just getting an error "non-static variable service cannot be referenced from a static context" which means something like i need to format it to be outside my Main but i want my Main to run it or it says my file has no Main and wont run it ... o.o
main-ish class + Show Spoiler +
package javaapplication4;
import generated.Ann; import javax.inject.Inject;
public class JavaApplication4 { getservice service;
public static void main(String[] args) {
try { // @Inject
// Ann ann = new Ann(); String output = service.fetchMovie().getAnime().getName(); // error is above is "non-static variable service cannot be referenced from a static context" System.out.println(output); // String output = fetchMovie(Ann ann).getName(); // System.out.println(output);
} catch (Exception e) {
e.printStackTrace();
} } }
getservice class + Show Spoiler + /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication4;
import generated.Ann; import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType;
/** * * @author J */
@ApplicationScoped public class getservice {
private Client client; private WebTarget target;
@PostConstruct protected void init() { client = ClientBuilder.newClient(); //target = client.target("http://www.omdbapi.com"); target = client.target("http://cdn.animenewsnetwork.com/encyclopedia/api.xml"); }
public Ann fetchMovie() { //return target.queryParam("anime", "4658") return target.queryParam("anime", "4658") .request(MediaType.TEXT_HTML) .header("Content-type", "text/html")//application_json or text_html or xml .get(Ann.class); }
}
basically i have to move the line "String output = service.fetchMovie().getAnime().getName();" so its not in the Main method ...? so what do i put in a Main method to make it go?
|
On March 04 2015 03:45 FFGenerations wrote:QUICK UPDATE i changed the 2 things to look a bit more like the old example.... they look like this now and i'm just getting an error "non-static variable service cannot be referenced from a static context" which means something like i need to format it to be outside my Main but i want my Main to run it or it says my file has no Main and wont run it ... o.o main-ish class + Show Spoiler +
package javaapplication4;
import generated.Ann; import javax.inject.Inject;
public class JavaApplication4 { getservice service;
public static void main(String[] args) {
try { // @Inject
// Ann ann = new Ann(); String output = service.fetchMovie().getAnime().getName(); // error is above is "non-static variable service cannot be referenced from a static context" System.out.println(output); // String output = fetchMovie(Ann ann).getName(); // System.out.println(output);
} catch (Exception e) {
e.printStackTrace();
} } }
getservice class + Show Spoiler + /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication4;
import generated.Ann; import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType;
/** * * @author J */
@ApplicationScoped public class getservice {
private Client client; private WebTarget target;
@PostConstruct protected void init() { client = ClientBuilder.newClient(); //target = client.target("http://www.omdbapi.com"); target = client.target("http://cdn.animenewsnetwork.com/encyclopedia/api.xml"); }
public Ann fetchMovie() { //return target.queryParam("anime", "4658") return target.queryParam("anime", "4658") .request(MediaType.TEXT_HTML) .header("Content-type", "text/html")//application_json or text_html or xml .get(Ann.class); }
}
basically i have to move the line "String output = service.fetchMovie().getAnime().getName();" so its not in the Main method ...? so what do i put in a Main method to make it go? Would something like
public static void main(String [] args) { ... JavaApplication4 app = new JavaApplication4(); String output = app.service.fetchMovie().getAnime().getName(); ... } work for you?
|
On March 04 2015 03:45 FFGenerations wrote:QUICK UPDATE i changed the 2 things to look a bit more like the old example.... they look like this now and i'm just getting an error "non-static variable service cannot be referenced from a static context" which means something like i need to format it to be outside my Main but i want my Main to run it or it says my file has no Main and wont run it ... o.o main-ish class + Show Spoiler +
package javaapplication4;
import generated.Ann; import javax.inject.Inject;
public class JavaApplication4 { getservice service;
public static void main(String[] args) {
try { // @Inject
// Ann ann = new Ann(); String output = service.fetchMovie().getAnime().getName(); // error is above is "non-static variable service cannot be referenced from a static context" System.out.println(output); // String output = fetchMovie(Ann ann).getName(); // System.out.println(output);
} catch (Exception e) {
e.printStackTrace();
} } }
getservice class + Show Spoiler + /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication4;
import generated.Ann; import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType;
/** * * @author J */
@ApplicationScoped public class getservice {
private Client client; private WebTarget target;
@PostConstruct protected void init() { client = ClientBuilder.newClient(); //target = client.target("http://www.omdbapi.com"); target = client.target("http://cdn.animenewsnetwork.com/encyclopedia/api.xml"); }
public Ann fetchMovie() { //return target.queryParam("anime", "4658") return target.queryParam("anime", "4658") .request(MediaType.TEXT_HTML) .header("Content-type", "text/html")//application_json or text_html or xml .get(Ann.class); }
}
basically i have to move the line "String output = service.fetchMovie().getAnime().getName();" so its not in the Main method ...? so what do i put in a Main method to make it go?
public static void main(String[] args) { getservice service = new getservice(); String output = service.fetchMovie().getAnime().getName(); } Try something like this.
|
woah woah thats what i just changed it to XD from googling the problem + Show Spoiler + package javaapplication4;
import generated.Ann; import javax.inject.Inject;
public class JavaApplication4 {
//getservice gt;
public static void main(String[] args) {
getservice gt = new getservice();
String output = gt.fetchMovie().getAnime().getName();
//Ann = service.fetchMovie().getAnime().getName(); // error is above is "non-static variable service cannot be referenced from a static context"
System.out.println(output); // String output = fetchMovie(Ann ann).getName(); // System.out.println(output);
} }
result (it ran) + Show Spoiler + Exception in thread "main" java.lang.NullPointerException at javaapplication4.getservice.fetchMovie(getservice.java:36) at javaapplication4.JavaApplication4.main(JavaApplication4.java:15) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds)
well done guys ill look at this next bit
ok the next bit is that client and target remain null when they should be set during protected void init() { + Show Spoiler + /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication4;
import generated.Ann; import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType;
/** * * @author J */
@ApplicationScoped public class getservice {
private Client client; private WebTarget target;
@PostConstruct protected void init() { client = ClientBuilder.newClient(); //target = client.target("http://www.omdbapi.com"); target = client.target("http://cdn.animenewsnetwork.com/encyclopedia/api.xml"); }
public Ann fetchMovie() { //return target.queryParam("anime", "4658") return target.queryParam("anime", "4658") .request(MediaType.TEXT_HTML) .header("Content-type", "text/html")//application_json or text_html or xml .get(Ann.class); }
}
i wonder if i need to activate them somehow , as if getservice gt = new getservice(); isnt enough to do so..
|
|
On March 04 2015 04:16 FFGenerations wrote:woah woah thats what i just changed it to XD from googling the problem + Show Spoiler + package javaapplication4;
import generated.Ann; import javax.inject.Inject;
public class JavaApplication4 {
//getservice gt;
public static void main(String[] args) {
getservice gt = new getservice();
String output = gt.fetchMovie().getAnime().getName();
//Ann = service.fetchMovie().getAnime().getName(); // error is above is "non-static variable service cannot be referenced from a static context"
System.out.println(output); // String output = fetchMovie(Ann ann).getName(); // System.out.println(output);
} }
result (it ran) + Show Spoiler + Exception in thread "main" java.lang.NullPointerException at javaapplication4.getservice.fetchMovie(getservice.java:36) at javaapplication4.JavaApplication4.main(JavaApplication4.java:15) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds)
well done guys ill look at this next bit ok the next bit is that client and target remain null when they should be set during protected void init() { + Show Spoiler + /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication4;
import generated.Ann; import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType;
/** * * @author J */
@ApplicationScoped public class getservice {
private Client client; private WebTarget target;
@PostConstruct protected void init() { client = ClientBuilder.newClient(); //target = client.target("http://www.omdbapi.com"); target = client.target("http://cdn.animenewsnetwork.com/encyclopedia/api.xml"); }
public Ann fetchMovie() { //return target.queryParam("anime", "4658") return target.queryParam("anime", "4658") .request(MediaType.TEXT_HTML) .header("Content-type", "text/html")//application_json or text_html or xml .get(Ann.class); }
}
i wonder if i need to activate them somehow , as if getservice gt = new getservice(); isnt enough to do so.. I think you have to enable @PostConstruct.
|
On March 04 2015 04:40 zzdd wrote:Show nested quote +On March 04 2015 04:16 FFGenerations wrote:woah woah thats what i just changed it to XD from googling the problem + Show Spoiler + package javaapplication4;
import generated.Ann; import javax.inject.Inject;
public class JavaApplication4 {
//getservice gt;
public static void main(String[] args) {
getservice gt = new getservice();
String output = gt.fetchMovie().getAnime().getName();
//Ann = service.fetchMovie().getAnime().getName(); // error is above is "non-static variable service cannot be referenced from a static context"
System.out.println(output); // String output = fetchMovie(Ann ann).getName(); // System.out.println(output);
} }
result (it ran) + Show Spoiler + Exception in thread "main" java.lang.NullPointerException at javaapplication4.getservice.fetchMovie(getservice.java:36) at javaapplication4.JavaApplication4.main(JavaApplication4.java:15) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds)
well done guys ill look at this next bit ok the next bit is that client and target remain null when they should be set during protected void init() { + Show Spoiler + /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication4;
import generated.Ann; import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType;
/** * * @author J */
@ApplicationScoped public class getservice {
private Client client; private WebTarget target;
@PostConstruct protected void init() { client = ClientBuilder.newClient(); //target = client.target("http://www.omdbapi.com"); target = client.target("http://cdn.animenewsnetwork.com/encyclopedia/api.xml"); }
public Ann fetchMovie() { //return target.queryParam("anime", "4658") return target.queryParam("anime", "4658") .request(MediaType.TEXT_HTML) .header("Content-type", "text/html")//application_json or text_html or xml .get(Ann.class); }
}
i wonder if i need to activate them somehow , as if getservice gt = new getservice(); isnt enough to do so.. I think you have to enable @PostConstruct.
yeah i deleted half of those @annotations coz fuck knows what they are and everyone does it differently and the example i started with does it in a specific way to output in a different way??.>....., now im trying to figure out what to put back or how to fix it lol. thanks (will update)
yeah right now i'm trying to put @Inject somewhere : this is permitted but it doesnt change anything (and it looks pretty shitty) + Show Spoiler +public class JavaApplication4 {
@Inject getservice gt;
public static void main(String[] args) {
getservice gt = new getservice();
maybe i need to configure the project or make one of the files a servlet or bean or something like that? i made the project "web application" then just made plain java classes....
when i rigthclick->properties the old example project it has things like "run on glassfish server" in the properties ......my project has none of that or even the options...
no i remade it as web application and made one of them a bean or something and it didnt do much lol
i reposted to stackoverflow here if you want to re-read but with better formatting sort of 
http://stackoverflow.com/questions/28841666/jax-rs-postconstruct-inject-tag-in-simple-get-request-project
|
This seems so unnecessarily complicated...
|
what do you mean? it is like 20 lines of code (see the stackoverflow link) ...im just trying to see if it stores the data as an object ... i should probably go and start from scratch again so i can start to understand this annotation stuff but the thing im trying to see work right now is if it stores the xml into an object....just it looks like the connection part has died when i started calling the service as an instance.... maybe something like this http://stackoverflow.com/questions/18161682/why-is-postconstruct-not-called
|
On March 04 2015 04:57 FFGenerations wrote:Show nested quote +On March 04 2015 04:40 zzdd wrote:On March 04 2015 04:16 FFGenerations wrote:woah woah thats what i just changed it to XD from googling the problem + Show Spoiler + package javaapplication4;
import generated.Ann; import javax.inject.Inject;
public class JavaApplication4 {
//getservice gt;
public static void main(String[] args) {
getservice gt = new getservice();
String output = gt.fetchMovie().getAnime().getName();
//Ann = service.fetchMovie().getAnime().getName(); // error is above is "non-static variable service cannot be referenced from a static context"
System.out.println(output); // String output = fetchMovie(Ann ann).getName(); // System.out.println(output);
} }
result (it ran) + Show Spoiler + Exception in thread "main" java.lang.NullPointerException at javaapplication4.getservice.fetchMovie(getservice.java:36) at javaapplication4.JavaApplication4.main(JavaApplication4.java:15) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds)
well done guys ill look at this next bit ok the next bit is that client and target remain null when they should be set during protected void init() { + Show Spoiler + /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication4;
import generated.Ann; import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType;
/** * * @author J */
@ApplicationScoped public class getservice {
private Client client; private WebTarget target;
@PostConstruct protected void init() { client = ClientBuilder.newClient(); //target = client.target("http://www.omdbapi.com"); target = client.target("http://cdn.animenewsnetwork.com/encyclopedia/api.xml"); }
public Ann fetchMovie() { //return target.queryParam("anime", "4658") return target.queryParam("anime", "4658") .request(MediaType.TEXT_HTML) .header("Content-type", "text/html")//application_json or text_html or xml .get(Ann.class); }
}
i wonder if i need to activate them somehow , as if getservice gt = new getservice(); isnt enough to do so.. I think you have to enable @PostConstruct. yeah i deleted half of those @annotations coz fuck knows what they are and everyone does it differently and the example i started with does it in a specific way to output in a different way??.>....., now im trying to figure out what to put back or how to fix it lol. thanks (will update) yeah right now i'm trying to put @Inject somewhere : this is permitted but it doesnt change anything (and it looks pretty shitty) + Show Spoiler +public class JavaApplication4 {
@Inject getservice gt;
public static void main(String[] args) {
getservice gt = new getservice(); maybe i need to configure the project or make one of the files a servlet or bean or something like that? i made the project "web application" then just made plain java classes.... when i rigthclick->properties the old example project it has things like "run on glassfish server" in the properties ......my project has none of that or even the options... no i remade it as web application and made one of them a bean or something and it didnt do much lol i reposted to stackoverflow here if you want to re-read but with better formatting sort of http://stackoverflow.com/questions/28841666/jax-rs-postconstruct-inject-tag-in-simple-get-request-project The laziest solution would be to call the init method from your gt object.
|
oh god well done it worked 
do you have a brief on what was wrong or should i just forget about it and go learn the annotations/jaxrs stuff and forget about it? (i did try to put the @Inject thing here and there but it didnt help)
look a celebratory picture
|
On March 04 2015 06:38 FFGenerations wrote:+ Show Spoiler +oh god well done it worked  do you have a brief on what was wrong or should i just forget about it and go learn the annotations/jaxrs stuff and forget about it? (i did try to put the @Inject thing here and there but it didnt help) look a celebratory picture ![[image loading]](http://i.imgur.com/lY7VFif.jpg) I'm not that familiar with @PostConstruct but it seems like it would normally be called after you inject. Since you aren't doing that, the init method is not being called.
|
On March 04 2015 07:21 zzdd wrote:Show nested quote +On March 04 2015 06:38 FFGenerations wrote:+ Show Spoiler +oh god well done it worked  do you have a brief on what was wrong or should i just forget about it and go learn the annotations/jaxrs stuff and forget about it? (i did try to put the @Inject thing here and there but it didnt help) look a celebratory picture ![[image loading]](http://i.imgur.com/lY7VFif.jpg) I'm not that familiar with @PostConstruct but it seems like it would normally be called after you inject. Since you aren't doing that, the init method is not being called.
well i will endeavour to understand it and report back here some time XD
|
On March 04 2015 10:12 FFGenerations wrote:Show nested quote +On March 04 2015 07:21 zzdd wrote:On March 04 2015 06:38 FFGenerations wrote:+ Show Spoiler +oh god well done it worked  do you have a brief on what was wrong or should i just forget about it and go learn the annotations/jaxrs stuff and forget about it? (i did try to put the @Inject thing here and there but it didnt help) look a celebratory picture ![[image loading]](http://i.imgur.com/lY7VFif.jpg) I'm not that familiar with @PostConstruct but it seems like it would normally be called after you inject. Since you aren't doing that, the init method is not being called.  well i will endeavour to understand it and report back here some time XD
Oh my...
Read through your posts, you are.. on quite the journey. Java EE doesn't feel like its something that you can just kinda bs your way through. All the annotations you are trying to use are a part of CDI, its the EE way of doing spring and ultimately using Inversion of Control pattenr. You can read up on it if you wish, but, you aren't going to have a full CDI container when you just try to hook up a main method. Nothing has told the application to even try to start doing CDI, let alone initialize all the beans.
http://docs.oracle.com/javaee/6/tutorial/doc/giwhl.html
|
lol , there's no way i can understand that sort of documentation :D
i'm not trying to BS my way, i just need to show my tutor that i'm starting to accomplish something on my personal project and telling him "oh i done a java tutorial and sort of understand bits of it a bit more" for the 20th week running won't go down well. the problem with that is there's no tutorials that do "exactly" the things i want to do so its sort of trying to mesh random shit together without having any idea if it will work let alone how to troubleshoot it
anyway this little prototype is working so i can show him i've bothered , and now i'll switch back to something there's an actual tutorial for (basic ecommerce or rest application)
cheers :D
|
On March 04 2015 12:36 FFGenerations wrote: lol , there's no way i can understand that sort of documentation :D
i'm not trying to BS my way, i just need to show my tutor that i'm starting to accomplish something on my personal project and telling him "oh i done a java tutorial and sort of understand bits of it a bit more" for the 20th week running won't go down well. the problem with that is there's no tutorials that do "exactly" the things i want to do so its sort of trying to mesh random shit together without having any idea if it will work let alone how to troubleshoot it
anyway this little prototype is working so i can show him i've bothered , and now i'll switch back to something there's an actual tutorial for (basic ecommerce or rest application)
cheers :D
http://www.objc.io/issue-11/dependency-injection-in-java.html
|
On March 04 2015 12:36 FFGenerations wrote: lol , there's no way i can understand that sort of documentation :D
i'm not trying to BS my way, i just need to show my tutor that i'm starting to accomplish something on my personal project and telling him "oh i done a java tutorial and sort of understand bits of it a bit more" for the 20th week running won't go down well. the problem with that is there's no tutorials that do "exactly" the things i want to do so its sort of trying to mesh random shit together without having any idea if it will work let alone how to troubleshoot it
anyway this little prototype is working so i can show him i've bothered , and now i'll switch back to something there's an actual tutorial for (basic ecommerce or rest application)
cheers :D
Unfortunately the number of times that there is a tutorial that shows you exactly what to do goes down very, very quickly. Trying to read that type of documentation and then figuring out how to piece together what you've read and actually applying it plays a large part of ones ability to solve problems. All that aside, I know that the ramp up time on this stuff isn't quick... there is a ton of shit to try to wrap your head around.
CDI Annotations are quite powerful, but, as you found with your main method if you aren't running inside a container they are quite useless. You need to make sure that you have a reason for using one of the annotations, don't just use them because you can.
Your getservice class (which should follow proper java class naming conventions -- GetService) will still work even without a @PostConstruct. @PostConstruct is going to work best when you have a service that has dependencies injected (@Inject) and then the service needs to do something afterwards to continue with initialization. A quick glance at your class doesn't reveal any dependencies, so changing your init() method to a constructor will allow for you to use your GetService even in a main method.
|
On March 03 2015 21:30 sabas123 wrote:Show nested quote +On March 03 2015 08:11 netherh wrote:
template<class T, class... Args> T* AddComponent(Args&&... args) { // create component // add to vector // if object is connected connect this component // return component }
this would be something like? template<class T, class... Args> T* AddComponent(Args&&... args) { FooComponent.connect(this); components.push_back(FooComponent); connect(); }
where <class T, class args> would be the class I want to add and the argument so of the constructor of that class?
For me it looks like this:
template<class T, class... Args> T* AddComponent(Args&&... args) { auto c = std::make_unique<T>(std::forward<Args>(args)...);
components.emplace_back(std::move(c));
if (connected) components.back().Connect(*this);
return components.back().Cast<T>(); }
Yep, T is the component type, and Args is the argument list for the component constructor. I'm actually using a type hiding class, hence the Cast call at the end. It's just the result of using unique_ptr: You have to move the unique_ptr into the vector, then you lose the original type and have to cast to get the correct return value.
If you're using unique_ptr<Component> directly in the entity class, I guess you'd have to get the raw pointer and dynamic_cast (or static_cast if you know certain conditions are always fulfilled).
This becomes much simpler if you just store raw pointers since there's no moving, but you have to be careful to delete things properly.
With C++03, you have to new the component outside the class anyway, since you can't forward arguments to a constructor.
|
what is wrong with comparing strings with == or != ?
|
On March 05 2015 03:54 travis wrote: what is wrong with comparing strings with == or != ?
A String variable is effectively a pointer to memory where the characters that make up the string are located. By comparing Strings using == and !=, you're comparing the pointers.
In C, C++, and C#, this won't work 80% of the time, as the same string may be located at different memory locations. It will work on the occasion that you do:
typedef string char[]; string a = "foo"; string b = a;
In Java, Strings are immutable types. The Java interpreter knows of a special property with immutable types that it can use the same memory for identical Objects, so using the == and != in Java works since both String Objects point to the same place in memory.... sometimes. It's undefined how often or when it will work, since there are optimizations that depend on the length of the string, total number of Objects, memory used, generation in the garbage collection, etc.
In Python, the immutable types optimization comes up again, with the added difficulty of type coercion. Using "is" instead of "==" will result in the Strings actually being compared, where using "==" will check that they both point to the same String. If one does not point to a String, you may get NaN instead of True or False... !Fun!
In Javascript, "==" will coerce types causing certain corner cases to give odd results, such as NaN instead of False."===" will probably do the string equality you want instead.
|
|
|
|